每个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
。在这些情况下,可以选择任意数量的结果。您可以使用一系列复选框来表示这一点,每个复选框result
在@survey.results
.
有时@survey.additive == false
。在这些情况下,只能选择一个结果。您可以使用一系列单选按钮来表示这一点,每个单选按钮result
在@survey.results
.
我正在使用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>
错误。
我的第二步是删除:label => r.name
,但结果是四行单独的单选按钮,每行标记为“已选择”,每行包含一个“是”单选按钮和一个“否”单选按钮。分开我的意思是在一行中选择“是”会在该行中取消选择“否”,但对其他行中的单选按钮没有影响。(我实际需要的是四个连接的单选按钮,每个按钮都标有result.name
in @survey.results
,因此取消选择四个中的任何一个都会取消选择其他三个。)
在那之后,我尝试了很多变化,但到目前为止我所有的尝试都失败了。我应该怎么办?