3

この構造を処理するために、simple_form と cocoon で RoR を使用しています。Node has_many :addresses

それぞれに、各ノード アドレスの 1 つをメイン アドレス (実際には SNMP 監視に使用されるもの) としてフラグを立てるAddressブールフィールドがあります。:main

これらのアドレスを管理するネストされたフォームがありますが、メインのアドレスを選択するきれいな方法が見つかりません。

論理的には、各アドレスが 1 つのラジオ グループ オプションであるラジオ ボタン グループを使用する必要がありますが、ネストされた形式では、各ラジオ ボタンは 1 つのアドレスに属し、異なる名前を持ちます。つまり、異なるグループに属します。

ラジオ ボタンの入力をノードの仮想属性にリンクし、選択したアドレスの:mainフィールドをtrueコールバックに設定できますが、各ボタンをそのアドレスにリンクするにはどうすればよいでしょうか (アドレス ID をボタンの値として使用できますが、新しく追加されたアドレスはIDはまだありません)。

これは、ノード フォームがどのように表示されるかを簡略化したものです (括弧はラジオ ボタンを表し、括弧はテキスト入力を表します)。

Name : [MyNode1         ]

| Address    | Main |
|------------|------|
| [10.0.0.1] | (*)  |
| [10.0.0.2] | ( )  |
| [10.0.0.3] | ( )  |

私の他の唯一の解決策は、JSフィードの選択ボックス(アドレスリストで何かを変更するとオプションが更新される)ですが、単純なラジオグループよりもクリーンで論理的ではありません...

編集 「許容できる」回避策は、ラジオ ボタンを属性以外のnameもの (例:data-group属性) でグループ化することです。誰かがこれを行うことができる優れた JS/jQuery プラグインを知っていますか?

4

1 に答える 1

0

多くの役割オブジェクトを持つタイトル(著者、編集者、翻訳者など、どの人物がそのタイトルに何をしたかを示すHMTグルーモデル)で、同様の問題がありました。各タイトルには主な人物がいて、通常は著者ですが、百科事典のように編集者や学芸員になることもあります。あなたが見たように、新しく作成されたネストされたモデルでRailsにラジオボタンを使用させることができませんでした。これが私がやったことです:

ネストされた Role パーシャルでは、次のようになります。

<p>
<%= f.collection_select :name, person_roles, :to_s, :titleize, {:prompt => "Role"}, {:class => 'combo'} %>
&nbsp;
<%= f.collection_select :person_id, Person.order(:sort_name), :id, :reverse_name, :prompt => "Person" %>
<%- if ! f.object.new_record? -%>
&nbsp;
<%= radio_button_tag 'title[role_id]', f.object.id, (@title.role_id == f.object.id) %>
<%= label_tag :role_id, "Primary", :for => "title_role_id_#{f.object.id}" %>
<%- end -%>
<%- if ! f.object.new_record? -%>
&nbsp;
<%= f.link_to_remove "Delete", :class => 'delete' %>
<%- end -%>

タイトル モデルでは:

has_many :roles, :dependent => :destroy
has_many :people, :through => :roles
belongs_to :role #the primary person, like the author or editor

accepts_nested_attributes_for :roles, :reject_if => lambda { |a| a[:name].blank? }, :allow_destroy => true

after_create :set_primary

def set_primary
  self.update_attributes( :role_id => self.roles.first.id ) if self.roles && self.roles.first
end

したがって、ネストされたモデルが保存されていない限り、ラジオ ボタンは表示されません。新しいネストされたモデルを追加すると、ラジオ ボタンと削除リンクのない部分的なフォームが作成されます (ネストされた子が保存されるまでどちらも機能しないため)。

于 2012-12-26T19:17:37.400 に答える