基本上,在创建新实体时,我使用build_owner来呈现所有者的嵌套属性。但是,我希望用户可以选择现有的所有者,或者在表单中创建一个新的。
实体模型:
class Entity < ActiveRecord::Base
belongs_to :owner
accepts_nested_attributes_for :owner
end
所有者模型(设计模型,遗漏验证):
class Owner < ActiveRecord::Base
has_many :entities
end
实体控制器(新方法):
def new
@entity = Entity.new
@entity.build_owner
end
实体视图(新方法):
<%= f.fields_for :owner do |o| %>
<%= o.select :id, Owner.all, include_blank: 'Create a New Owner' %>
<%= o.text_field :name %>
<%= o.email_field :email %>
<% end %>
因此,如果用户从列表中选择所有者,则应用程序应将此所有者指定为owner_id,并忽略:name和:email字段。但是,目前该应用程序启动了一个错误:name和:email验证是否存在。
如何在创建实体记录时允许用户选择现有所有者或创建新所有者?
- 更新
通过JavaScript的强大功能,我通过给:name和:email字段:当selectbox的val为空时使用:disabled prop来完成这项工作。但是,我仍然对更多Rails-y方式感兴趣。
答案 0 :(得分:0)
尝试先查找所有者是否存在,然后再进行分配。否则建立它。代码仅供参考。这是未经测试的
def new
@entity = Entity.new
begin
@owner = Owner.find(params[:owner_id])
@entity.owner = @owner
rescue RecordNotFound => e
@entity.build_owner
end
end