繁体   English   中英

在Rails中为嵌套属性添加空记录

[英]Adding empty record for nested attribute in rails

我正在使用Rails 4 / Ruby 2.0.0。 我有两个模型- ArticlesGraphics Articles 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
...

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM