他のユーザーに招待状を送るためのフォームを使ってプロジェクトページを作成しようとしています。オーナー(プロジェクトを作成したユーザー)は、他のユーザーをプロジェクトに参加させることができます。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フォームがあります。 このフォームを送信すると、招待状(通知は作成しますが通知システムは開始していません)を作成します。 > Mongoid - あなたが見ることができるように、私は私のデシベル(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
:
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
そしてコントローラ:だから、私はこのモデルを作成しました)が、私は)プロジェクト/ショーページ(フォームを送信するとき、私はこのエラーがあります:
No route matches [POST] "/invites/new"
それは普通のことだが、私は自演したいですw:
- ビューをレンダリングせずにデータベースにデータを挿入する方法はありますか?
- 電子メールアドレスでユーザーIDにアクセスするにはどうすればよいですか? (DBにあります)
ありがとう!
NB:あなたは
フォームアクションを 'new'ではなく' create'パスにしたいとします。 Railsの慣習に従って、 'new'アクションは' POST 'リクエストではなく 'GET'リクエストに応答します。 'POST'(フォーム提出)で' create'メソッドに到達するには、パスを 'invites_path'に変更してください。 –
@AlexandreAngelimこの情報をありがとうございます!invites_controllerを見れば、どうすれば '@invite'を保存できますか?自分のメールに応じて、どのように私はproject_idと受信者のIDにアクセスできますか? –
このような場合には、プロジェクト内のリソースを 'invites'ルートファイルに入れ子にし、フォームをそのネストされたルートを指すように変更します。私はあなたが特に 'form_for'の代わりに' form_tag'を使用し、実際の招待フィールド(電子メールのような)を使って新しい招待状を作成する理由を知りません。現在のアプローチを使用して、いくつかの変更が必要になります。フォームアクションは 'project_invites_path(@project)'を指し、 'InvitesController#create'では' params [:project_id] 'にアクセスしなければなりません。あなたはそこから分かると思います。 –