2011-12-07 2 views
2

登録の方が優れている理由は次のとおりです。あるいは、このコードを別の方法で改善しなければならないのでしょうか?オブジェクトまたはオブジェクトIDを渡しますか?

上記の「より良い」という私の考えは、基本的には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

私はオブジェクトとの比較を好みます。両方とも同様のパフォーマンスに変換する必要があります。 – aishwarya

+2

整数を渡す唯一の理由は、オブジェクトを作成せずに何らかの形でその番号がある場合です。しかし、すでにオブジェクトを持っている場合は、それを渡してください。オブジェクトの作成はコードの最長部分になります。 – DGM

+0

@DGMのチャンスはほとんどの場合student.idですが、もっと重要な考慮事項(デザインパターン、ベストプラクティスなど)があるかもしれないと考えました。 – Chris

答えて

12
def enroll_this_way(student) 
    self.enrollments.build :student => student 
end 
+1

これはいくつかの理由により優れていますが、そのほとんどは簡潔です。 – tadman

2

どちらも、おそらく完璧ではありません。 course#enrollments<<(object, …)は登録オブジェクトに外部キーを設定するので、を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の質問に答えなかったことに気づきました。違いは全くありません。

関連する問題