2012-01-04 12 views
0

スコープと少し苦労します。 ネストされた属性のためのRailsフォーム

belongs_to :profile 
scope :business, where('level LIKE ?', 'business') 
scope :mobile, where('level = ?', 'mobile') 

だから、基本的プロファイルは、モバイルとビジネスの番号を持つことができます..私は持っている、私のPhoneContactInfoモデルに

has_many :phone_contact_infos, :dependent => :destroy 
accepts_nested_attributes_for :phone_contact_infos, :reject_if => :all_blank 

..then:私は電話番号を持っているProfileモデルを持っています。私がしようとしてきたことは、電話番号の各タイプ(ビジネスとモバイル)の編集フォームを作ることです。これは私が...間違ったことをしている持っているものである

<%= 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私は2つのデータベースエントリ(モバイル用と業務用の別)上記のコードは、私がで終わるように、各タイプのためのフォームを挿入を持っていますビジネス番号とモバイル番号の両方のテキストフィールド。私はちょうど1つの番号を編集したい、例えば、モバイル。上記のPhoneContactInfoモデルで定義されたスコープを容易にするために、上記のコードを変更する必要があると思います。

ありがとうございました!

答えて

0

ここに1つのアプローチがあります。あなたが使用することができ、あなたのビューで

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 

あなたが条件含めるようにProfileモデルにhas_many関係を変えることができる

<%= f.fields_for :mobile_phone_contact_infos do |contact_info| %> 

を...、それが唯一の引き抜きます携帯電話の連絡先、ビジネス番号ではありません。

2つのノート:

  1. あなたは:conditions => {}句(例えばwhere('level LIKE ?', 'business'))に生のSQL条件を使用できますが、あなたは機能のビットを失います。上記の私のコードでは、もしあなたがprofile.mobile_phone_contact_infos.buildなら、Railsはあなたのために「レベル」フィールドをインテリジェントに埋め込みますが、生のSQLコードを使用する場合はそうではありません。
  2. 私はこれをテストしておらず、アソシエーションが多型である場合、これまでは:conditionsしか使用していませんでした。これがあなたの機能性を稼働させるために必要かどうかを確認することはできません。

幸運!

+0

ありがとうございます。これを試してみてください。 – absolutskyy

関連する問題