以下是我的情景:
名为Course的模型有许多CourseCodes。 CourseCode属于课程。 如果没有课程,则无法创建CourseCode,并且如果没有至少一个CourseCode,则无法创建课程。
class Course < ActiveRecord::Base
has_many :course_codes
validate :existence_of_code
private
def existence_of_code
unless course_codes.any?
errors[:course_codes] << "missing course code"
end
end
end
class CourseCode < ActiveRecord::Base
belongs_to :course
validates_presence_of :course
end
整个场景感觉有点像捕捉22。 有没有办法在同一时间创建两个? 我正在使用Rails 3.2
答案 0 :(得分:1)
使用accepts_nested_attributes_for解决了这个问题。
嵌套属性允许您通过父级保存关联记录的属性。默认情况下嵌套。
class Course < ActiveRecord::Base
has_many :course_codes, inverse_of: :course
validate :existence_of_code
accepts_nested_attributes_for :course_codes
private
def existence_of_code
unless course_codes.any?
errors[:course_codes] << "missing course code"
end
end
end
class CourseCode < ActiveRecord::Base
belongs_to :course, inverse_of: :course_codes
validates_presence_of :course
end
像这样使用。
Course.create!({
course_codes_attributes: [{ code: "TDA123" }],
# ...
})
答案 1 :(得分:-1)
对我来说很好看。删除validates_presence_of :course
可能会让您的工作变得更轻松,因为它往往会妨碍您添加更多内容。
创建课程时,请执行以下操作:
Course.create course_codes: [CourseCode.new(...), CourseCode.new(...)]
ActiveRecord会解决问题。
答案 2 :(得分:-1)
您可以将unless
添加到您计划首先创建的模型中。例如:
class CourseCode < ActiveRecord::Base
belongs_to :course
validates_presence_of :course, :unless => lambda { Course.all.empty? }
end