投稿画面から非同期でのコメント機能を実装しているところ一点疑問が出ましたので質問させて下さい。
内容がparamsで送られてきているset_list_idがストロングパラメーターで受け取れないという点になります。
送られてきているparams
params => <ActionController::Parameters {"utf8"=>"✓", "authenticity_token"=>"cyWCD/8aCpYmPxgzJeKzH3Nf1WdX1gzMjsNG6X4JSAO8exjLN+GmwIHGdwuzQpm4vcmgYX5UDKVZtUGBeFOR7w==", "comment"=> <ActionController::Parameters {"content"=>"行きたかった!!"} permitted: false>, "controller"=>"comments", "action"=>"create", "id"=>"1", "set_list_id"=>"1"} permitted: false>
@commentの中身
@comment => #<Comment:0x00007fba9eb33980 id: nil, content: "行きたかった!!", user_id: nil, set_list_id: nil, created_at: nil, updated_at: nil>
下に示したviewのform_forによりフォームを作っています。
showhtmlhaml
1.comment__form__box 2 = form_for [@set_list, @comment], url: {controller: 'comments', action: 'create', set_list_id: '1'} do |f| 3 = f.text_field :content, placeholder: "コメントを入力して下さい", class: "comment__form" 4 = f.button type: "submit", class: "comment__post__button" do 5 %i.far.fa-comment
JavaScript側では下のようにフォーム情報をコントローラーに送信しています。
comment.js
1$('#new_comment').on('submit', function(e){ 2 e.preventDefault(); 3 var formData = new FormData(this); 4 var url = $(this).attr('action'); 5 $.ajax({ 6 url: url, 7 type: "POST", 8 data: formData, 9 dataType: "json", 10 processData: false, 11 contentType: false 12 })
最後にこちらがコントローラーの記述になります。
commentscontroller
1def create 2 @comment = Comment.new(comment_params) 3 @comment.user_id = current_user.id 4 @comment.set_list_id = params[:set_list_id] 5 respond_to do |format| 6 if @comment.save 7 format.html { redirect_to :back } 8 format.json 9 end 10 end 11 end 12 13 private 14 def comment_params 15 params.require(:comment).permit(:content, :set_list_id) 16 end
set_list_idがストロングパラメーターで受け取れないので、直接paramsから引っ張ってきていますが、なぜこのようにとってこれているのにストロングパラメーターだと受け取れないのかが気になり、夜も眠れません。
何卒、宜しくおねがいします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/26 00:43
2020/05/26 00:49
2020/05/26 02:03