传递对象或对象ID?

时间:2011-12-07 18:10:19

标签: ruby-on-rails ruby oop activerecord

鉴于以下代码,注册方法更好,为什么?或者这些代码是否应该以其他方式完全改进?

我对上述“更好”的想法基本归结为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

2 个答案:

答案 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。关于enrollmentsid是什么,没有含糊之处。

强烈建议Rails Guides: 4.3 has_many Association Reference

编辑:我刚才意识到我没有回答OP问题。没有任何区别。