コメント機能付きのギャラリーを構築しようとしています。アルバム、写真、コメントの 3 つのクラスがあるとします。これらのオブジェクトの関係は、Album には多くの写真があり、Photo には多くのコメントがあります。
各コメントは登録ユーザーによって残されているため、コメント オブジェクトには、comment_text、user_id、および photo_id (コメントが属する写真を参照) があります。
各写真の「ショー」ビューの下にコメントフォームを作成しようとしています。Controller と Show ビューの一部を次に示します。
controllers/photos_controller.rb
class PhotosController < ApplicationController
...
def show
@photo = Photo.find(params[:id])
@new_comment = @photo.comments.build if user_signed_in?
@comment_items = @photo.comments.paginate(page: params[:page])
end
...
end
ビュー/写真/show.html.erb
...
<%= form_for @new_comment, html: {method: :post} do |c| %>
<div class="row">
<div class="span">
<%= image_tag current_user.avatar.url(:thumb) %>
</div>
<div class="span">
<p><%= c.label "Enter your comment here:" %></p>
<p><%= c.text_area :comment_text %></p>
<p><%= c.submit "Submit Comment", class: "btn btn-tiny" %></p>
</div>
</div>
<% end %>
問題は、CommentsController を作成しているときに、前の「表示」ページから create メソッドに写真の ID (photo_id) を渡す方法がわからないことです。フォームの非表示フィールドを介してパススルーする場合にのみ可能ですか? Railsでこれを行うためのよりエレガントな方法はありますか? さらに、セキュリティ上のポイントとして、隠しフィールドを介して photo_id を取得した場合、誰かが特定の「投稿」リクエストを作成して、アルバム内のすべての写真にコメントを投稿することはできますか? (ずっと前にphpのフォーラムのスパマーのように..)
これを読んでくれてありがとう、そして答えてくれてありがとう!