[英]Radio buttons grouped over multiple nested form entries
我正在使用帶有simple_form和cocoon的RoR來處理這個結構: Node has_many :addresses
每個Address
都有一個布爾:main
字段,它將每個節點地址中的一個標記為主要地址(實際上是用於SNMP監控的地址)。
我有一個嵌套的表單來管理這些地址,但我找不到一個干凈的方法來選擇主要的地址。
從邏輯上講,我應該使用一個單選按鈕組,每個地址都是一個單選按鈕組,但是,在嵌套表單中,每個單選按鈕都屬於一個單獨的地址,並且名稱不同,這意味着它們位於不同的組中。
我可以將單選按鈕輸入鏈接到Node中的虛擬屬性,並在回調中將所選地址' :main
字段設置為true
,但是如何將每個按鈕鏈接到其地址(我可以使用地址ID作為按鈕值,但是新添加的地址還沒有ID)。
這是我的Node表單應該是什么樣的簡化版本(括號表示單選按鈕,文本輸入的括號):
Name : [MyNode1 ]
| Address | Main |
|------------|------|
| [10.0.0.1] | (*) |
| [10.0.0.2] | ( ) |
| [10.0.0.3] | ( ) |
我唯一的另一個解決方案是JS feeded選擇框(當我在地址列表中更改某些內容時更新選項),但它絕對不如簡單的無線電組清晰和合乎邏輯......
編輯 “可接受的”解決方法是將單選按鈕分組到name
屬性以外的其他位置(例如: data-group
屬性)。 有人知道任何可以做到這一點的好的JS / jQuery插件嗎?
我有一個類似的問題,一個標題有很多角色對象(一個HMT膠水模型,它說哪個人做了什么標題 - 作者,編輯,翻譯,等等)。 每個標題都有一個主要人物,通常是作者,但有時候是編輯或策展人,就像在百科全書中一樣。 盡可能地嘗試,我無法讓Rails在新創建的嵌套模型中使用單選按鈕,如您所見。 這是我最終做的事情:
在嵌套的角色部分:
<p>
<%= f.collection_select :name, person_roles, :to_s, :titleize, {:prompt => "Role"}, {:class => 'combo'} %>
<%= f.collection_select :person_id, Person.order(:sort_name), :id, :reverse_name, :prompt => "Person" %>
<%- if ! f.object.new_record? -%>
<%= 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? -%>
<%= 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
因此,除非已保存嵌套模型,否則單選按鈕甚至不會出現。 添加新的嵌套模型將為您提供一個表單部分缺少單選按鈕和刪除鏈接(因為在保存嵌套子項之前兩者都不起作用)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.