稍微挣扎范围。我有一个个人资料模型,其中包含电话号码:
has_many :phone_contact_infos, :dependent => :destroy
accepts_nested_attributes_for :phone_contact_infos, :reject_if => :all_blank
..然后在我的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 %>
..因为我有两个数据库条目(一个用于移动设备,另一个用于商业用途),上面的代码为每种类型插入一个表单,所以我最终得到了商业和移动号码的文本字段。我只想编辑一个号码,比如说移动号码。我想我需要对上面的代码进行更改,以便于上面的PhoneContactInfo模型中定义的范围。
谢谢!
答案 0 :(得分:0)
这是一种方法。
您可以更改个人资料模型中的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 => {}
子句中使用原始SQL条件(例如where('level LIKE ?', 'business')
),但您会失去一些功能。在我上面的代码中,Rails将智能地填充“&#39;级别”。如果你profile.mobile_phone_contact_infos.build,你可以使用该字段 - 但如果使用原始SQL代码则不会。:conditions
。我无法确认是否有必要让您的功能正常运行。