嵌套属性的导轨形式
问题描述:
与范围有点挣扎。我有有电话号码轮廓模型:嵌套属性的导轨形式
has_many :phone_contact_infos, :dependent => :destroy
accepts_nested_attributes_for :phone_contact_infos, :reject_if => :all_blank
..then在我PhoneContactInfo模式,我有..
belongs_to :profile
scope :business, where('level LIKE ?', 'business')
scope :mobile, where('level = ?', 'mobile')
所以基本上一个配置文件可以拥有移动和一个商务号码。我一直在尝试的做法是为每种类型的电话号码(业务和移动电话)编辑一个编辑表单。这是我这做了错误的事情..
<%= form_for @profile do |f| %>
<%= f.fields_for :phone_contact_infos do |contact_info| %>
<%= contact_info.text_field :country, :size => 2 %>
<%= contact_info.text_field :city, :size => 5 %>
<%= contact_info.text_field :number, :size => 8 %>
<% end %>
<% end %>
..since我有两个数据库条目(一个用于手机和其它业务)上面的代码中插入一个表格为每种类型的,所以我结束了用于商业和手机号码的文本字段。我只想编辑一个号码,比如手机。我想我需要在上面的代码中进行更改,以便在上面的PhoneContactInfo模型中定义范围。
谢谢!
答
以下是一种方法。
你可以改变has_many
关系在您的个人资料模型,包括条件:
has_many :mobile_phone_contact_infos, :class_name => "PhoneContactInfo", :conditions => {:level => "mobile"}, :dependent => :destroy
has_many :business_phone_contact_infos, :class_name => "PhoneContactInfo", :conditions => {:level => "business"}, :dependent => :destroy
在你看来那么你可以使用:
<%= f.fields_for :mobile_phone_contact_infos do |contact_info| %>
...它只会拔出手机联系,而不是商业号码。
有两点需要注意:
- 虽然你可以使用
:conditions => {}
条款(如where('level LIKE ?', 'business')
)原始SQL条件下,你失去了一些功能。在我上面的代码中,如果你的profile.mobile_phone_contact_infos.build Rails会智能地为你填充'level'字段 - 但是如果你使用原始的SQL代码则不会。 - 我还没有测试过这个,过去我只在关联是多态时使用
:conditions
。我无法确认是否有必要使您的功能正常工作。
祝你好运!
感谢抢劫,会试试这个。 – absolutskyy 2012-01-05 22:49:19