在Ruby on Rails中以嵌套形式传递父ID

时间:2013-01-19 10:28:05

标签: ruby-on-rails nested-forms erb

目标:保存构思模型的评论。

形式:

<%= form_for([@idea, IdeaComment.new], :validate => true) do |f| %>
        <div class="control-group">
            <div class="controls">
                <%= f.text_area :text, :placeholder => 'some text', :rows => 5 %>
                <%= validate_errors(IdeaComment.new) %>
            </div>
        </div>
        <%= f.button 'Comment', :class => 'button grad-green', :type => 'submit' %>
    <% end %>

控制器:

 @idea_comment = IdeaComment.new(params[:idea_comment])
 ...

但是如果我们看看params hash: enter image description here

如何将idea_id传递给“idea_comment”?

1 个答案:

答案 0 :(得分:5)

客户端验证与面向资源的表单冲突。改为使用常规服务器端验证。

说明:

面向资源的表单基于嵌套资源发布到路径:

form_for([@idea, IdeaComment.new]) # => POST '/ideas/[:idea_id]/idea_comments'

Rails从请求路径中提取:idea_id并将其作为参数传递。在create操作中,关联是在保存之前通过直接分配设置的:

# controllers/idea_comments_controller.rb
def create
  @idea_comment = IdeaComment.new(params[:idea_comment])
  @idea_comment.idea_id = params[:idea_id]
  # ...
  @idea_comment.save
end

客户端验证的问题在于,它将失败并阻止表单提交,直到@idea_comment.idea_id被分配,这不会发生在之后表格已提交。