0

0、1、または2つの連絡先が必要なトーナメントモデルがあります。コンタクトモデルを作成has_many :contactsし、トーナメントとコンタクトに設定しましたbelongs_to :tournament。トーナメントaccepts_nested_attributes_for :contacts

しかし、トーナメントのフォームを作成するとき、どのように行うべきかよくわかりません。私は2つ持つことを考えてfields_for :contactsいますが、それは厄介な感じがします。primary_contactまた、トーナメントモデルに2つの特定の属性(との線に沿ったものsecondary_contact)を含めることも検討しましたが、その方法がわかりません。

これを行うための「正しい」方法はありますか?助言がありますか?

私はRails3.1BTWを使用しています。

4

3 に答える 3

2

fields_for :contacts行く正しい方法です。

tournament.contacts複数のアイテムがある場合、1つに複数のフィールドセットが表示されるという事実を利用してくださいfields_for :contacts

tournament.contacts.build次に、未保存を作成してコレクションContactに追加するという事実を利用します。contactsフォームfields_forを表示する前にコントローラーでこれを行うと、この空の連絡先が表示され、ネストされた属性で正しく使用されます

于 2012-05-09T08:45:56.870 に答える
1

後でトーナメントに連絡先を追加する柔軟性を維持する必要があるため、2つのフィールドの連絡先を制限するべきではないと思います。

プロジェクトとユーザーの間で(チェックボックスを使用して)小さな例を実行しました。アイデアを得ることができるかもしれません。

https://github.com/sameera207/HABTMsample

于 2012-05-09T09:37:43.227 に答える
0

非永続contact_list属性を追加することをお勧めします。そうすれば、必要な数の連絡先をコンマで区切って1つのフィールドに入力できます。

has_many :contacts
attr_accessor :contact_list

def contact_list=value
  value.split(',').each do |email|
    self.contacts.build(:email => email).save
  end
end

def contact_list
  self.contacts.join(',')
end  

連絡先ごとに(名前、電子メール、電話番号だけでなく)詳細情報を入力する必要がある場合は、さらに多くのフィールドが必要になります。

次のrailscastが役立つ場合があります。

http://railscasts.com/episodes/196-nested-model-form-part-1

于 2012-05-09T08:36:49.430 に答える