2017-07-10 3 views
1

サイトのコメント機能を実装しようとしています。これまでのところ、コメントしたいムービーのmovie_idを、コメントを作成するページ(デフォルトのスカホールドビュー)に渡すことができました。その後、私はのcreateメソッドにmovie_idを渡そうとしますが、それは合格しません。私はそのクラス(params[:movie_id].class)をcomment属性に割り当てようとしましたが、それはNilClassと言います。Simple_form:パラメータが渡されない

マイコード:

comments_controller.rb

def create 
    @comment = Comment.new 
    @comment.comment = params[:comment].values.first 
    @comment.user_id = current_user.id 
    @comment.movie_id = params[:movie_id] 
    #... 
end 

_form.html.erb(1がnewページのレンダリング)

<%= simple_form_for(@comment) do |f| %> 
    <%= f.error_notification %> 

    <div class="form-inputs"> 
     <%= f.input :comment, label: false, placeholder: 'Your opinion'%> 
     <%= f.hidden_field :movie_id, input_html: { value: params[:movie_id] } %> 
    </div> 

    <div class="form-actions"> 
     <%= f.button :submit %> 
    </div> 
<% end %> 

params[:movie_id]htmlファイルで、私はそれになりたいものを実際にあります私はそれをプレースホルダとして追加しようとしましたが、正しい値を持っています。 ...お時間を

おかげ

これはおそらく愚かな間違いになりますが、私は本当にこだわっています。

答えて

1

あなたのHTMLには誤りがあります。隠されたフィールドは、隠されたフィールドの適切なレール構文を使用するか、単純なフォーム構文を使用する必要があります。

レール構文:

<%= f.hidden_field :movie_id, value: params[:movie_id] %> 

単純なフォーム構文:コントローラで

<%= f.input :movie_id, as: :hidden, input_html: { value: params[:movie_id] } %> 

@comment.movie_id = params[:comment][:movie_id] 

ところで、その良好なフォーム

@comment.movie_id = comment_params[:movie_id] 
private 
def comment_params 
    params.require(:comment).permit(:movie_id, ...(and others..) 
end 
を次のように強力なパラメータを使用します
+0

後者では、フィールドに値が設定されています(' type'を指定してもフィールドは隠されません)それでもまだそれは無くなっています。上記の –

+0

の構文を修正しましたが、非表示になっていない場合は、テキストフィールドに値が表示されましたか? –

+0

はい、値は正しく設定されています。コントローラに渡しても、それでもnilが表示されます。 –

0
<%= f.hidden_field :movie_id, params[:movie_id] %> 

これは正常に動作しますか?

私はそれにもかかわらず、コントローラにあなたはおそらくのform_forを使用する@comment = Comment.newを持っているので、コントローラで@comment.movie_id = params[:movie_id]を行い、その後、ちょうどそれがクリーナー持って、フォームで@comment.movie_idを使うのでしょうか?

+0

これは "1"のための ''未定義メソッド 'merge 'を返します:String''エラー –

関連する問題