これは私を狂ってしまいます。おそらく私は明らかに何かを見落としているでしょうが、私は同じ話題の他の投稿をすべて読んだので問題を解決することはできません。助けを前にありがとう。入れ子になったフォームは、form_withとfields_forを使って動作しません。
私はモデルKlasse
とモデルKlp
を持っています。 klasse has many klps
のインスタンス。 klasseと同じ形式でklpを作成したいと思います。私はこれをform_with
とfields_for
を使って設定しました。klasses_controller.rb
には3.times { @klasse.klps.build }
がありますが、この繰り返しはうまくいかないようです。 fields_forブロックは3回ではなく1回表示されます。
new.html
のフォームは、「スタートガイド」のガイドと「フォームヘルパー」ガイドの後のfields_forブロックの後に作成されました。
アプリの\モデル\ klasse.rb:
class Klasse < ApplicationRecord
has_many :klps
has_many :people, :through => :klps
accepts_nested_attributes_for :klps, allow_destroy: true, :reject_if => :all_blank
validates :name, presence: true,
length: { minimum: 1 },
uniqueness: true
validates :klp_std_soll, presence: true,
length: { minimum: 1 }
def klp_std_ist
self.klps.sum("std")
end
end
アプリの\モデル\ person.rb
class Person < ApplicationRecord
has_many :klps
has_many :klasses, :through => :klps
validates :name, presence: true,
length: { minimum: 1 },
uniqueness: true
validates :vorname, presence: true,
length: { minimum: 1 }
def last_and_first_name
"#{name}, #{vorname}"
end
end
アプリの\モデルここ
は私のコードです\ klp.rb のclass Klp < ApplicationRecord
belongs_to :klasse
belongs_to :person
end
アプリの\コントローラ\ klasses_controller.rb
class KlassesController < ApplicationController
def new
@klasse = Klasse.new
3.times { @klasse.klps.build }
end
private
def klasse_params
params.require(:klasse).permit(:name, :klassentyp_id, :klp_std_soll, klps_attributes: [:id, :person_id, :std, :_destroy])
end
end
アプリの\コントローラ\ klps_controller.rb
class KlpsController < ApplicationController
def new
@klp = Klp.new
end
private
def klp_params
params.require(:klp).permit(:klasse_id, :person_id, :std)
end
end
アプリ\ビュー\ klasses \ new.html.erb
<%= form_with scope: :klasse, url: klasses_path, local: true do |form| %>
<ul>
<%= form.fields_for :klps do |klps_form| %>
<p>
<%= klps_form.label :person %>
<%= klps_form.collection_select :person_id, Person.all, :id, :last_and_first_name %>
<%= klps_form.label :std %>
<%= klps_form.text_field :std %>
</p>
<% end %>
</ul>
<p>
<%= form.submit %>
</p>
<% end %>
質問がわかりません。 'form.fields_for'ブロックの3回の反復を作成しようとしていますか? –
@TomAranda:はい。これらの入力フィールドの3つのセットが必要です。 – JRinCH
class Person:klps endご確認くださいperson.rb –