我有一个标准属于Post
和Comment
之间有许多关系。
#post.rb
class Post < ApplicationRecord
has_many :comments
end
#comment.rb
class Comment < ApplicationRecord
belongs_to :post, dependent: :destroy
end
#routes.rb
resources :posts
resources :comments, except: [:index, :show]
现在在我的帖子节目视图中,我打电话
%li= link_to 'New comment', new_comment_path(post_id: @post.id)
,其中提供了与评论表单一起使用的new
操作的帖子ID。该网址如下所示:
/comments/new?post_id=6
。
现在问题发生了。填写表单后,post_id不会被转移也不会被发送到创建操作,我收到错误Post must exist
。查看params
哈希值,显然找不到post_id
。
问题:如何通过post_id
并构建新的Comment
?除了嵌套路由之外还有其他方法吗?如果是这样,是否可取(或Rails方式)?我是否应该创建自定义路由并覆盖create
方法提供的resources
?
我知道我可以通过使用嵌套路由来解决这个问题,因为这时create操作将有适当的url来查找父ID(Post
)。但是,我试图更加彻底地理解Rails的内部工作方式,所以我试图寻找其他方法。
答案 0 :(得分:1)
您可以在评论表单中传递"1 2 3 4 5"
:post_id
:
hidden_field_tag
现在,在您的控制器的创建操作中,<%= form_with model: @comment do |form| %>
<%= form.hidden_field :post_id, value: params[:post_id] %>
<%# ... other comment fields %>
<%= form.submit %>
<% end %>
作为:post_id
:comment
有关更多示例,请参阅hidden_field() API documentation。