これは簡単に解決できると確信している質問であり、一部は私自身の知識不足に起因するものですが、少し検索を行ったところ、問題の適切な解決策がわかりません。
私の状況では、多くのReviewオブジェクトを持つクラスProductがあります。レビューもUsersに属します。モデルを正しく定義したと仮定すると、送信時に特定のレビューを特定の製品に結び付けるために、 :product_id変数をレビューに正しく渡す方法を理解するのに苦労しています。
これまでのところ、製品情報とlink_toを の形式で表示するビューがあり<%= link_to 'Review Product', new_review_path(:product_id => @product.id) %>
ます。URL がhttp://localhost:3000/reviews/new?product_id=1として表示されるため、新しいレビューを追加するための結果のビュー フォーム (その製品用であることを意図したもの) は、少なくともある程度正しいように見えます。前述のように、事前に検索を行いましたが、私のような質問に対する同様の回答が提供されましたが、@review
インスタンス変数の値を表示すると、各プロパティが nil になるため、問題は解決しませんでした。
私のreviews_controller.rbファイルでは、次のようなことを行うことで、少なくとも新しいアクションのフォーム内でこれらの変数を割り当てることができます。
@review = Review.new(:product_id => params[:product_id])
同様のことを行い、 current_user変数 (devise gem によって処理される)を渡すことで、 user_id変数を割り当てることもできます。Rails が採用する createアクションは、通常、私が読んだすべてのものに基づいて、変数の新しいインスタンスを作成することを認識しています。ただし、これを行うと、フォームに入力した変数を除いてデータが失われます。技術的に言えば、createアクションでcurrent_user変数を渡すことができるはずですが、product 変数を渡すことができません (または渡す方法がわかりません)。価値のあることとして、私は現在、ネストされたルートを使用していませんが、それが直接的な解決策であるかどうかはわかりません.
この問題を解決するために私ができることをよりよく理解している人がいれば、助けていただければ幸いです。ほのめかしたように、それは素人の間違いだと確信しています。
PS私はそれを説明する最善の方法がわからないので、質問の言葉遣いがぎこちない場合はお詫び申し上げます.