鉴于以下代码,注册方法更好,为什么?或者这些代码是否应该以其他方式完全改进?
我对上述“更好”的想法基本归结为1)大多数哲学上正确的(最佳实践)和2)最有效/高效的。
Class Course < ActiveRecord::Base
has_many :enrollments # basically a join table
has_many :students, :source => :user, :through => :enrollments
def enroll_this_way(student)
self.enrollments << Enrollment.new(:course_id => self.id, :student_id => student.id)
end
# OR
def enroll_that_way(student_id)
self.enrollments << Enrollment.new(:course_id => self.id, :student_id => student_id)
end
end
答案 0 :(得分:12)
def enroll_this_way(student)
self.enrollments.build :student => student
end
答案 1 :(得分:2)
两者都可能并不完美。 course#enrollments<<(object, …)
设置注册对象上的外键,因此您无需在:course_id
上设置enrollment
,如果外键是,则无需调用course#enrollments<<(object, …)
已设置,您只需致电enrollment#save
。
正如@ zed_0xff指出的那样,如果您希望更改持久保存到数据库,则可以调用course#enrollments#build
(或更好course#enrollments.create
。
此外,您可以安全地省略self
。关于enrollments
和id
是什么,没有含糊之处。
强烈建议Rails Guides: 4.3 has_many Association Reference
编辑:我刚才意识到我没有回答OP问题。没有任何区别。