在rails中添加嵌套属性的空记录

时间:2013-12-29 08:15:53

标签: ruby-on-rails nested-attributes has-many

我在Rails 4 / Ruby 2.0.0中工作。我有两个模型 - ArticlesGraphicsArticles has_many Graphics。因此,在我的代码中,我尝试将空记录添加到文章的图形集合中,以便在表单中,将有一组空字段来添加新记录。我无法弄清楚为什么这些字段不会出现在表单上。

我已经尝试了多种构建图形集合的方法,但似乎都没有。当然,我一定会错过一些非常小的东西。

Article.rb

class Article < ActiveRecord::Base
    has_many :graphics, :dependent => :destroy, :foreign_key => 'article_id' 

    accepts_nested_attributes_for :graphics,
      :allow_destroy => true,
      :reject_if     => :all_blank
end

Graphic.rb

class Graphic < ActiveRecord::Base
    belongs_to :article
    validates_presence_of :path, :caption
end

_form.html.erb

...
<% f.fields_for :graphics do |g| %>
    <div class="clear clearfix pad-b-20">
        <div class="w-1-2 left f-left">
          <div class="field">
            <%= g.label :path %><br>
            <%= g.text_field :path %>
          </div>
        </div>
        <div class="w-1-2 left f-left">
          <div class="field">
            <%= g.label :caption %><br>
            <%= g.text_field :caption %>
          </div>
        </div>
    </div>
<% end %>
...

以表单助手方法

构建它

物品/ _form.html.erb

<%= form_for(setup_article(@article)) do |f| %>

form_helper.rb

module FormHelper
    def setup_article(article)
        article.graphics.build
        article
    end  
end

使用ActiveRecord回调

Article.rb

...
after_initialize :build_graphics

private

def build_graphics
    self.graphics.build
end

在控制器中构建

ArticleController.rb

...
def new
    @article = Article.new
    @article.graphics.build
end
...

1 个答案:

答案 0 :(得分:0)

问题是,form_forfields_for都需要使用<%=,因为它们会呈现表单的内容。

因此,要解决您的问题,您需要编写

...
<%= f.fields_for :graphics do |g| %>
   Your content
<% end %>
...