如何根据Rails中text_field的内容设置和取消设置build_association?

时间:2012-02-22 04:52:23

标签: ruby-on-rails ruby forms activerecord erb

我有一个简单的Rails表单,它使用条件build_association(如果还没有关联的父级)来包含text_field来编辑父级。如果要添加父级的新记录,这将非常有用。这样做的问题是,如果父项已经存在,如果更新了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 个答案:

答案 0 :(得分:1)

我认为我的宝石get_or_build对你有用。我有同样的问题,没有找到任何适当的清洁解决方案所以我决定写这个宝石。享受!