簡體   English   中英

如何使simple_form呈現我的嵌套屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM