0

每个survey has_many resultsaccepts_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.namein @survey.results,因此取消选择四个中的任何一个都会取消选择其他三个。)

在那之后,我尝试了很多变化,但到目前为止我所有的尝试都失败了。我应该怎么办?

4

1 回答 1

0

underfined method 'name'错误可以通过使用来克服r.object.name

如果您可以将许多结果selected设置为 true,那么这就足够了,并且它应该适用于上述情况。如果没有,请继续阅读。

布尔值上带有 radio_buttons 的东西是它们将生成一个yesandno选项。如果您只想要一个选定的结果,我建议切换到 Surveyhas_many :resultsbelongs_to :selected_result. 然后,您将能够构建一组单选按钮来设置selected_result_id, 生成自survey.results

如果这不是一个选项,您将必须使用自定义验证来验证调查,以便它只能有一个 selected_result (为此添加范围)并构建一组从survey.results. attr_accessor :selected_result_id然后,在您的控制器中,您将不得不遍历结果并设置result.selected = false除所选结果之外的每个结果。

于 2013-03-08T11:09:52.537 回答