[英]How to make simple_form present my nested attributes
調查和結果如下鏈接:
class Survey < ActiveRecord::Base
has_many :results
accepts_nested_attributes_for :results
end
class Result < ActiveRecord::Base
belongs_to :survey
end
結果在其表中有以下列:
create_table "results", :force => true do |t|
t.integer "survey_id"
t.integer "field_id"
t.boolean "selected", :default => false
end
它還具有以下虛擬屬性:
class Result < ActiveRecord::Base
def name
self.field.name.gsub("{{input}}", self.input)
end
end
我希望我的調查表能夠列出我的結果,從最高點結果到最低點結果。
每個結果都應該綁在一個收音機盒上,這樣一次只能有一個。
到目前為止,我的表單看起來像這樣:
= simple_form_for [@competitor, @survey] do |f|
= f.simple_fields_for :result, f.object.results.sort{ |a,b| b.points <=> a.points}.each do |r|
= r.input :selected, :label => r.object.name
= f.button :submit, :id => 'submit_survey'
對於我的麻煩,我收到以下錯誤:
undefined method `name' for #<Enumerator:0x007fb8075d3038>
我怎樣才能實現我的想法?
您必須在最后刪除each
電話,這樣您才能擁有:
= simple_form_for [@competitor, @survey] do |f|
= f.simple_fields_for :result, f.object.results.sort{ |a,b| b.points <=> a.points} do |r|
= r.input :selected, :label => r.object.name
= f.button :submit, :id => 'submit_survey'
simple_fields_for
自動運行每個。
您還應該使用@survey.results.sort{...}
而不是f.object.results.sort{...}
。 這讀起來更好,更有效。 盡可能避免使用f.object
:)
迭代結果應該是這樣的,但我不確定它是否足以制作無線電
= simple_form_for [@competitor, @survey] do |f|
- @survey.results.sort{ |a,b| b.points <=> a.points}.each do |result|
= f.simple_fields_for result do |r|
= r.input :selected, :label => result.name
= f.button :submit, :id => 'submit_survey'
能夠通過完全拋棄嵌套屬性並使用以下方法來實現所需的結果:
= f.collection_radio_buttons :result_ids, @survey.results, :id, :name
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.