다른 사용자에게 초대장을 보낼 양식이있는 프로젝트 페이지를 만들려고합니다. 소유자 (프로젝트를 만든 사람)는 다른 사용자를 프로젝트에 참여하도록 초대 할 수 있습니다.Ruby on rails - 새로운 기능을 렌더링하지 않고 프로젝트 페이지에 초대장을 만듭니다.
보기/프로젝트/show.html.erb
<div class="container">
<h3> <%= @project.title %> </h3>
<h6> Créé par <%= link_to @project.owner.username, user_path(@project.owner) %> </h6>
<hr>
<h3> Inviter des utilisateurs au projet </h3>
<!-- form for search users -->
<%= form_tag new_invite_path, method: :post, :class => 'form-inline' do %>
<div class="form-group">
<%= text_field_tag :search, params[:search], size: 30, class: 'form-control' %>
</div>
<%= submit_tag 'Ajouter au projet', class: 'btn btn-success' %>
<% end %>
<!-- end form for search users -->
<!-- display users results -->
<% @users.each do |user| %>
<p> <%= user.username %> | <%= user.email %> </p>
<% end %>
<!-- end display results -->
</div>
컨트롤러/projects_controller.rb
class ProjectsController < ApplicationController
def show
@project = Project.find(params[:id])
@users = User.search(params[:search])
end
def new
@project = Project.new
end
def create
@project = Project.new(project_params)
@project.owner = current_user
@project.members = []
if @project.save
puts @project
redirect_to user_path(current_user)
else
puts 'something went wrong'
puts @project.errors.full_messages
render 'new'
end
end
private
def project_params
params.require(:project).permit(:title, :description, :client, :deadline, :owner, :members)
end
end
온 :
은 지금, 여기에 코드입니다 프로젝트 페이지에는 사용자 이름과 이메일을 가진 모든 사용자를 찾을 수있는 Ajax 양식이있다. 이제이 양식을 제출할 때 초대장을 만들려고합니다 (알림, 알림 시스템을 시작하지 않았습니다).
class Invite
include Mongoid::Document
field :email
belongs_to :project
belongs_to :sender_id, :class_name => 'User'
belongs_to :recipient_id, :class_name => 'User'
end
그리고 컨트롤러 : -> Mongoid 당신이, 내가 내 DB (MongoDB를에 초대 저장할 볼 수 있습니다 그래서
class InvitesController < ApplicationController
def new
@invite = Invite.new(email: params[:search], sender_id: current_user.id)
byebug
@invite.save
end
def create
@invite = Invite.new(params[:search])
if @invite.save
flash[:success] = 'the invitation is send'
redirect_to user_path(current_user)
else
render 'projects/show'
end
end
end
그래서,이 모델을 만들었습니다), 양식을 제출하면 (프로젝트/쇼 페이지에서)이 오류가 있습니다.
No route matches [POST] "/invites/new"
정상이지만 알고 싶습니다. w :
- 보기를 렌더링하지 않고 데이터베이스에 데이터를 삽입하는 방법은 무엇입니까?
- 이메일 주소로 사용자 ID에 액세스하는 방법은 무엇입니까? (DB에 있음)
고마워요!
NB : render :nothing => true, :status => 200
그래서 당신의 생성 방법이 될 것입니다 당신이
폼 액션이'new'가 아닌'create' 경로를 가리 키길 원합니다. Rails Restful convention에 따라'new' 액션은'POST' 요청이 아닌'GET' 요청에 응답 할 것입니다. 'POST' (폼 제출)로'create' 메소드를 사용하려면 경로를'invites_path'로 변경해야합니다. –
@AlexandreAngelim이 정보를 제공해 주셔서 감사합니다!invites_controller를 보면'@invite'를 어떻게 저장할 수 있습니까? 이메일에 따라 project_id 및 수신자 ID에 어떻게 액세스 할 수 있습니까? –
그런 경우에해야 할 일은 라우트 파일의 프로젝트 내에 리소스를'invites'하고 중첩시켜 폼을 중첩 된 라우트를 가리 키도록 변경하는 것입니다. 나는 왜 당신이 특히 form_for 대신에 form_tag를 사용하고 이메일과 같은 실제 초대장 필드를 사용하여 새로운 초대장을 만드는 것을 선택했는지 모른다. 현재 접근 방식을 사용하여 몇 가지를 변경해야합니다. form 액션은'project_invites_path (@project)'를 가리켜 야하고'InvitesController # create'에서는'params [: project_id]'에 접근 할 수 있습니다. 나는 네가 거기에서 알아낼 수 있다고 생각해. –