0

ブログを読んだり、レールキャストを見たり、本を読んだりしてから 2 日が経ちましたが、問題に対するエレガントな解決策が見つかりません。

コンテキスト: 複数の contact_persons を持つことができる複数のビジネスがあります。また、各ビジネスには常に 1 人のプライマリ contact_person が必要です。したがって、business_contact_personsテーブルを介して、ビジネスとcontact_personの間に多対多の関係があります。

class Business < AR
has_many :business_contact_persons, :dependent => :destroy
has_many :contact_persons, :through => :business_contact_persons


class ContactPersons < AR
has_many :business_contact_persons, :dependent => :destroy
has_many :business, :through => :business_contact_persons


class BusinessContactPerson < AR
belongs_to :business
belongs_to :contact_person

#Primary is a boolean in the database
attr_accessible :primary, :contact_id, :business_id

今、私がビジネス ビューで達成しようとしているのは、ユーザーが特定のビジネスに割り当てたいすべての contact_person を選択できるようにすることと、主要な連絡先にしたいものを選択できるようにすることです。したがって、新しいビジネス ビューでは、使用可能なすべての contact_persons を表示するチェック ボックスのグループと、プライマリを選択するための contact_persons の同じリストを持つ radio_button グループを表示できます。

ビジネスを救うために、コントローラーでこれを使用します。

@business.attributes = params[:business]

属性トラフにアクセスするため、business_contact_personsを保存するために機能します

params[:business][:contact_person_ids]

しかし、それはユーザーが選択したものにプライマリ business_contact_persons ブール値フィールドを割り当てません。さらに悪いことに、ユーザーはビジネスのプライマリ contact_person を変更できるため、ビジネスの編集をどのように処理するかということです。

また、ビジネスに主要な contact_person が割り当てられていることをどのように検証できるかについてのアイデアは非常に素晴らしいでしょう

4

1 に答える 1

1

これを実現する1つの方法は、Railsフォームタグヘルパーを使用することです。

独自の選択タグを作成します。

独自の名前を使用して独自のselectタグを作成できます。たとえば、「bcp」はビジネス担当者を意味します。独自のオプションを作成し、コレクションからオプションを作成するためのショートカットがあります。

コントローラ:

コントローラでは、次のパラメータを取得します。

bcp = BusinessContactPerson.find(params[:bcp])
bcp.primary = true
bcp.save!

Railsには、独自のフォームを作成するためのヘルパーがたくさんあります。

http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-select_tag

before_validation:

ビジネスモデルを検証する前に、BCPを作成/更新します。

ActiveRecord#before_validationコールバックを確認することをお勧めします。

#inverse_of設定も参照して、#belongs_toが同じレコードを確実に検出するようにしてください。

(これがすべてうまくいくかどうかはわかりません-これらは私が試みる出発点です)

于 2012-09-20T04:27:32.613 に答える