[英]Issues with Simple_form and accepts_nested_attributes_for
[英]How to make simple_form do what I want with accepts_nested_attributes_for
每個survey
has_many
results
,並accepts_nested_attributes_for
results
。
/app/models/survey.rb:
attr_accessible :results_attributes
has_many :results
accepts_nested_attributes_for :results
每個結果都已選中或未選中:
/db/schema.rb:
create_table "results", :force => true do |t|
t.boolean "selected", :default => false
t.integer "survey_id"
end
有時@survey.additive == true
。 在這些情況下,可以選擇任意數量的結果。 您可以通過一系列復選框來表示這一點, @survey.results
每個result
一個。
有時@survey.additive == false
。 在這些情況下,只能選擇一個結果。 您可以使用一系列單選按鈕來表示這一點, @survey.results
每個result
一個。
我正在使用simple_form和HAML。
我正在嘗試編寫/app/views/surveys/_form.html.haml
以便它將創建一系列單選按鈕,以選擇@survey.additive == false
時選擇的結果。
(從那里可以容易地推斷出代碼,以在@survey.additive == true
時創建一系列復選框。)
我的第一次嘗試是:
= simple_form_for [@competitor, @survey] do |f|
= f.error_notification
= f.simple_fields_for :results do |r|
= r.input :selected, :as => :radio_buttons, :label => r.name
= f.button :submit, :id => 'submit_survey'
這undefined method 'name' for #<SimpleForm::FormBuilder:0x007fbd1f687048>
錯誤贏得了一個undefined method 'name' for #<SimpleForm::FormBuilder:0x007fbd1f687048>
。
我的第二個步驟是刪除:label => r.name
,但結果是四行單選按鈕,每行標記為“已選擇”,每行包含一個“是”單選按鈕和一個“否”單選按鈕。 分開表示,是指在一行中選擇“是”會取消選擇該行中的“否”,但對其他行中的單選按鈕沒有影響。 (我實際上需要的是四個連接的單選按鈕,每個按鈕在@survey.results
帶有一個result.name
標記,以便取消選擇這四個按鈕中的任何一個都將取消選擇其他三個按鈕。)
之后,我嘗試了許多變體,但到目前為止,我的所有嘗試都失敗了。 我該怎么辦?
underfined method 'name'
錯誤可以通過使用r.object.name
來克服。
如果將selected
設置為true可以得到很多結果,那么就足夠了,並且應該可以在上述情況下工作。 如果沒有,請繼續閱讀。
布爾值上帶有radio_buttons的東西是它們將生成yes
和no
選項。 如果只希望選擇一個結果,建議切換到Survey has_many :results
和belongs_to :selected_result
。 然后,你就可以建立一套單選按鈕來設置selected_result_id
,從產生survey.results
。
如果不是這樣,則必須使用自定義驗證來驗證Survey,以便它只能具有一個selected_result(為此添加一個范圍),並為attr_accessor :selected_result_id
構建一個由survey.results
生成的單選按鈕。 然后,在控制器中,您將必須遍歷結果並為除選定結果以外的所有結果設置result.selected = false
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.