2017-12-07 10 views
0

私は、この関連の設定試してみたいと思います:Railsの多型エイリアス団体

# app/models/course.rb 
class Course < ActiveRecord::Base 
    belongs_to :subjectable, polymorphic: true 
end 

# app/models/student.rb 
class Student < ActiveRecord::Base 
    has_many :courses, as: :subjectable 
end 

# app/models/campus.rb 
class Campus < ActiveRecord::Base 
    has_many :courses, as: :subjectable 
end 

をしかし、これはコードに非常によく読みませんでした。

#this seems fine 
campus = Campus.last 
campus.courses 

#this dosent make much sense gramatically 
student = Student.last 
student.courses 

キャンパスはコースを提供していますが、科目は科目を持っていません。今は読んでいないカバーの下で同じものです。

student.subejectsstudent.coursesと同じ結果になるようにどうすればよいですか?

+2

'alias_method:科目、:courses'または'エイリアス被験者courses'。 – mudasobwa

+1

_Sidenote:_シンボリックキーを持つハッシュにはハッシュテーブル構文を使用しませんが、10年前のように廃止されました。代わりに 'as::subjectable'を使用してください。 – mudasobwa

+0

あなたは正しいです、上記の例を別の投稿からコピーしましたが、私が探していた答えを得るために質問を変更しました。ありがとうございます@mudasobwa – TheLegend

答えて

0

アソシエーションには、必要に応じて名前を付けることができます。関連するクラスをマッハする必要はありません。この場合

、あなたは尖ったクラスが何であるかのActiveRecordを伝える必要があり:

# app/models/student.rb 
class Student < ActiveRecord::Base 
    has_many :subjects, as: :subjectable, class_name: 'Course' 
end