1

link_toとUJSを使用してパラメータを渡す適切な方法を理解するのに苦労しています。

私は次のリソースを持っています:

  • 写真
  • コメントコメント
  • ユーザー

ユーザーが[コメントを追加]をクリックして写真にコメントしようとしています。これが発生すると、UJSを使用してボックスがポップアップし、new.js.erbファイルを使用してレンダリングされたフォームが表示されます。「コメントの作成」が投稿された後、create.js.erbファイルが呼び出されて更新が処理されます。これにより、コメントボックスが非表示になり、コメントのリストにコメントが追加されます。

写真のindex.html.erbで、次のことを行っています。

現在の写真のIDを渡すコメントを追加するためのリンクを指定します。

<%= link_to 'Add Comment', new_comment_path( photo_id: photo.id ), remote: true %>

これにより、URLが0.0.0.0:3000/comments/new?photo_id=1になります。これは、私が期待していることです。

今私の質問は、次のようなものを指定できるように、新しいアクションでこの渡されたパラメーターをどのように処理するかです。

@comment.photo_id = photo_id 
or 
@comment.photo_id = params[:photo_id] 

私のcomments_controller.rbで?

追加されたコメントのためにphoto_id値を@comment.photo_id列に保存するのに役立つJSでできることはありますか?

4

2 に答える 2

0

まず、コメントやいいねなどにネストされたルートの使用を開始することをお勧めします。ここにrailscastがありますnested_routes_railscast

質問に戻って@comment.photo_id = params[:photo_id]、コントローラーで使用します。


これを達成するためのより良いアプローチがあります、あなたはすでに写真ショーページにポップアップを持つことができます。ポップアップで、新しいコメントモデルのフォームを作成できます。特定の写真をクリックすると、JavaScriptを使用してその写真のIDを取得し、フォームの:photo_idの非表示フィールドにコピーします。

于 2012-11-21T08:46:22.213 に答える
0

はい、パラメータでphoto_idを取得できます。指定した方法で取得できます。あなたのケースで写真に多くのコメントがあるとします。したがって、あなたの場合、comments_controllerでparams [:photo_id]を取得すると、次のことができます。-

@photo = Photo.find_by_id(params[:photo_id])
@photo.comments.create(params[:comment])

guides.rubyonrails.orgからネストされたリソースについて読んでください。そうすれば、安らかな方法でコメント作成ルートを生成できます。

于 2012-11-21T09:00:53.020 に答える