Rails:如何将表单与表单一起发送?

kub*_*ubi 2 ruby-on-rails

我有一个Post引用父对象的模型对象.的edit,newreply方法都使用相同的局部模板.

posts_controller方法:

def edit
  @post = Post.find(params[:id])
end

def reply
  @post = Post.new
  @replypost = Post.find(params[:id])
  @post.title = @replypost.title
  @post.parent = @replypost
end
Run Code Online (Sandbox Code Playgroud)

部分模板代码:

<% form_for(@post) do |f| %>
  <%= f.error_messages %>

  <p>
    <%= f.label :title %><br />
    <%= f.text_field :title %>
  </p>
  <p>
    <%= f.label :body %><br />
    <%= f.text_area :body %>
  </p>
  <%= if :parent then f.hidden_field :parent end %>
  <p>
    <%= f.submit "Create" %>
  </p>
<% end %>
Run Code Online (Sandbox Code Playgroud)

如果我查看部分模板生成的源HTML,我可以看到我将某种对象id传递给我的create方法.

<input id="post_parent" name="post[parent]" type="hidden" value="#&lt;Post:0x103e3bdf0&gt;" />
Run Code Online (Sandbox Code Playgroud)

问题是,当我尝试保存我创建的这个新对象时,我得到一个警告,它期待一个Post并得到一个String.我确信我可以通过设置和获取parent_id并将其传递给我的表单来解决这个问题,但我想知道是否有更好的方法来做到这一点,更优雅和Rails-esque.

Que*_*ark 5

尝试 <%= f.hidden_field :parent_id unless @post.parent.nil? %>

这将使用帖子传递父ID,然后您可以.find(params[:post][:parent_id])在以后需要该对象.