TrainingClass
Railsアプリケーションで、モデルの作成フォームを設定しようとしています。このフォームで、ユーザーが同じフォーム内に複数のClassMeeting
モデル(モデルとbelongs_toの関係を持つ)を作成できるようにしたいのですが、これを使用しています。残念ながら、フォームを送信するたびにエラーメッセージが表示されます。TrainingClass
accepts_nested_attributes_for
Meetings class can't be blank
これは、ClassMeeting
があり、保存されるまでIDを取得できないvalidates :class_id, presence: true
ためTrainingClass
ですが、これを回避する正しい方法がわかりません。(私はいくつかの可能な方法を考えることができますが、それらは正確にエレガントな解決策ではありません。)何かアイデアはありますか?あなたが私に与えることができるどんな助けにも感謝します。
注:これに似た質問が過去にかなりの数行われていることに気づきました。しかし、それらの質問のほとんどは古く、時代遅れの答えがあり、それらのどれも私の問題を解決しませんでした。
これが私のコードです。ClassMeeting
簡潔にするためにいくつかの側面を簡略化しましたが、モデルとTrainingClass
モデルの関係は変更されていないことに注意してください。
ClassMeetingモデル:
# == Schema Information
#
# Table name: class_meetings
#
# id :integer not null, primary key
# class_id :integer
# start :datetime
# end :datetime
# location :string(255)
# created_at :datetime not null
# updated_at :datetime not null
#
class ClassMeeting < ActiveRecord::Base
attr_accessible :start, :end, :location
validates :class_id, presence: true
validates :start, presence: true
validates :end, presence: true
validates :location, presence: true, length: {maximum: 255}
belongs_to :training_class, foreign_key: :class_id, inverse_of: :meetings
end
TrainingClassモデル:
# == Schema Information
#
# Table name: training_classes
#
# id :integer not null, primary key
# description :string(255)
# created_at :datetime not null
# updated_at :datetime not null
#
class TrainingClass < ActiveRecord::Base
attr_accessible :description, :meetings_attributes
validates :description, length: {maximum: 255}
has_many :meetings, class_name: :ClassMeeting, foreign_key: :class_id, inverse_of: :training_class
accepts_nested_attributes_for :meetings, allow_destroy: true
end
TrainingClassesコントローラー:
class TrainingClassesController < ApplicationController
def new
@training_class = TrainingClass.new()
@training_class.meetings.build
end
def create
@training_class = TrainingClass.new()
if @training_class.update_attributes(params[:training_class])
redirect_to @training_class, notice: 'Class was successfully created.'
else
render "new"
end
end
end
TrainingClassフォーム(表示):
<%= form_for @training_class do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<%= f.text_area :description %>
<h2>Schedule</h2>
<%= f.fields_for :meetings do |meeting| %>
<%= meeting.label :start, "Start of Meeting:" %>
<%= meeting.text_field :start %>
<%= meeting.label :end, "End of Meeting:" %>
<%= meeting.text_field :end %>
<%= meeting.label :location, "Location:" %>
<%= meeting.text_field :location %>
<% end %>
<%= f.submit class:"btn btn-large btn-primary" %>
<% end %>