0

目标:保存想法模型的评论。

形式:

<%= 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: 在此处输入图像描述

如何将idea_id 传递给“idea_comment”?

4

1 回答 1

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才会发生。

于 2013-01-19T13:52:42.683 回答