将额外结果添加到关联收集代理结果

Add extra result to Association Collection Proxy result

我有两个模型,

class User < ActiveRecord::Base
  has_many :posts
end

class Post < ActiveRecord::Base
  belongs_to: user
end

我正在使用 formtastic gem,请考虑 users_controlleredit 操作。表单的所有必需 user 和关联的 posts 属性将由 formtastic 表单

预填充

代码:

<%= semantic_form_for @user do |f| %>

  <%= f.input :name %>

  <%= f.inputs :posts do |p| %>
    <%= p.input :title %>
    <%= p.input :comment %>
  <% end %>

<% end %>

例如,我有一个 @user 和两个 posts 关联。 在做 @user.posts 时,结果是这样的。

 [
  [0] #<Post:0x0000000aa53a20> {
                   :id => 3,               
                :title => 'Hello World',
              :comment => 'Long text comes here'
  },
  [1] #<Post:0x0000000aa53a41> {
                   :id => 5,               
                :title => 'Hello World 2',
              :comment => 'Long text comes here too'
  }
] 

因此表单将包含两个 posts 字段进行编辑。

实际上,我想要在这两个 post 之前还有一个空白的 post 表格。

这可以通过在第 0 个位置的 @object.posts 结果中插入一个新的空 post 对象来轻松实现。

所以,我想要的 @object.posts 结果应该完全像

    [
      [0] #<Post:0x0000000aa53a50> {
                       :id => nil,               
                    :title => nil,
                  :comment => nil
      },
      [1] #<Post:0x0000000aa53a20> {
                       :id => 3,               
                    :title => 'Hello World',
                  :comment => 'Long text comes here'
      },
      [2] #<Post:0x0000000aa53a41> {
                       :id => 5,               
                    :title => 'Hello World 2',
                  :comment => 'Long text comes here too'
      }
    ] 

@user.posts 获得此结构的任何解决方案?

#edit 操作中执行如下操作:

def edit
  #... your code
  @user.posts << Post.new
end