【发布时间】:2011-12-07 18:10:18
【问题描述】:
鉴于以下代码,哪个 enroll 方法更好,为什么?还是应该以其他方式完全改进这段代码?
我对上述“更好”的想法基本上可以归结为 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
【问题讨论】:
-
我更喜欢与对象进行比较。但两者都应该转化为相似的性能。
-
传递整数的唯一原因是如果您以某种方式获得了该数字而没有创建对象。但是,如果您已经拥有该对象,请传递它。对象创建将是代码中最长的部分。
-
@DGM 大多数时候我都会有 student.id,但我认为可能有一些更重要的考虑因素(设计模式、最佳实践等)。
标签: ruby-on-rails ruby oop activerecord