2012-02-22 65 views
0

我有一个简单的Rails窗体,它使用一个条件build_association(如果还没有关联的父级)来包含text_field来编辑父级。如果应该添加新的父记录,这很有用。这样做的问题是,如果父项已经存在,如果text_field被更新,那么它将会改变影响许多孩子的父记录。如果不管父关联是否已经存在,都会调用build_association,那么不断创建新的重复父项。如何根据Rails中text_field的内容设置和取消设置build_association?

我想了解如何使用build_association和fields_for向数据库中添加新父项,如果用户键入不熟悉的名称,但要将父项设置为现有记录(如果名称与现有父项的匹配名称。 (如果我能得到这部分工作的权利,下一步将是添加自动完成。)的代码如下:

<%= form_for @sermon, :html => { :multipart => true } do |f| %> 
     <div class="field"> 
     <%= f.label :title %><br /> 
     <%= f.text_field :title %> 
     </div> 
     <div class="field"> 
     <%= f.label :date %><br /> 
     <%= f.text_field :date %> 
     </div> 
<div> 
    <% @sermon.build_speaker unless @sermon.speaker %> 
     <%= f.fields_for :speaker do |g| %> 
      <%= g.label :name, "Speaker name:" %><br /> 
      <%= g.text_field :name %> 
      <%= g.submit %> 
     <% end %> 
    </div> 
     <div class="actions"> 
     <%= f.submit %> 
     </div> 
    <% end %> 

回答

1

我觉得我的宝石get_or_build将是对您有用。我有同样的问题,并没有找到任何适当的清洁解决方案,所以我决定写这个宝石。请享用!

+0

这是完美的。我很高兴你碰巧看到我的问题。 – Michael 2012-09-18 16:42:08