0

それぞれ、、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。そのような場合、任意の数の結果を選択できます。これは、の各チェックボックスに1つずつ、一連​​のチェックボックスで表しresultます@survey.results

時々@survey.additive == false。そのような場合、選択できる結果は1つだけです。これは、の各ボタンに1つずつ、一連​​のラジオボタンで表し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>エラーをもたらしました。

2番目の動きは削除でし:label => r.nameたが、結果として4つの別々の行のラジオボタンが作成されました。各行には「選択済み」というラベルが付いており、それぞれに「はい」ラジオボタンと「いいえ」ラジオボタンが含まれています。別に言うと、ある行で[はい]を選択すると、その行で[いいえ]の選択が解除されますが、他の行のラジオボタンには影響しませんでした。(実際に必要だったのは、接続された4つのラジオボタンで、それぞれにresult.nameinのラベルが付いている@survey.resultsため、4つのうちのいずれかを選択解除すると、他の3つも選択解除されます。)

その後、いろいろなバリエーションを試しましたが、今のところすべて失敗しています。私は何をすべきか?

4

1 に答える 1

0

underfined method 'name'エラーは、を使用して解決できますr.object.name

trueに設定して多くの結果を得ることができる場合はselected、これで十分であり、上記の状況で機能するはずです。そうでない場合は、読み進めてください。

ブール値にradio_buttonsがあるのはyesnoオプションを生成することです。選択した結果を1つだけにしたい場合は、Surveyhas_many :resultsと。の状況に切り替えることをお勧めしbelongs_to :selected_resultます。selected_result_id次に、から生成された、を設定するためのラジオボタンのセットを作成できますsurvey.results

それがオプションでない場合は、カスタム検証を使用してSurveyを検証し、selected_resultを1つだけ持つことができるようにし(そのスコープを追加)、から生成されsurvey.resultsたラジオボタンのセットを作成する必要がありattr_accessor :selected_result_idます。次に、コントローラーで、結果を反復処理しresult.selected = false、選択した結果を除くすべての結果を設定する必要があります。

于 2013-03-08T11:09:52.537 に答える