我正在尝试建立一个具有评论功能的画廊。考虑有 3 个类:相册、照片、评论。这些对象的关系是相册有很多照片,照片有很多评论。
每个评论都是注册用户留下的,因此评论对象中有comment_text、user_id和photo_id(指评论所属的照片)。
我正在尝试在每张照片的“显示”视图下创建一个评论表单。下面是一些 Controller 和 Show 视图:
控制器/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 时,我不知道如何将照片的 id (photo_id) 从上一个“显示”页面传递给 create 方法。只有通过表单中的隐藏字段传递它才有可能吗?在 Rails 中有没有更优雅的方式来做到这一点?此外,关于安全性的一点,如果我通过隐藏字段检索 photo_id,是否有人能够编写特定的“发布”请求,以便对相册中的所有照片发表评论?(就像很久以前php论坛中的垃圾邮件发送者..)
感谢您阅读本文并提前感谢您的回答!