![](/img/trans.png)
[英]Rails: How to create a has_many through association with an alias/class_name
[英]Rails has_many with alias name
在我的用戶模型中,我可以:
has_many :tasks
在我的任務模型中:
belongs_to :user
然后,假設外鍵“user_id”存儲在任務表中,我可以使用:
@user.tasks
我的問題是,如何聲明 has_many 關系,以便我可以將用戶的任務稱為:
@user.jobs
... 或者 ...
@user.foobars
多謝了。
如果您仍然希望能夠將它們稱為任務,也可以使用alias_attribute
:
class User < ActiveRecord::Base
alias_attribute :jobs, :tasks
has_many :tasks
end
如果你通過 has_many 使用,並且想要別名:
has_many :alias_name, through: :model_name, source: :initial_name
(感謝 Sami Birnbaum 的更正)
要完成@SamSaffron 的回答:
您可以將class_name
與foreign_key
或inverse_of
一起使用。 我個人更喜歡更抽象的聲明性,但這只是一個品味問題:
class BlogPost
has_many :images, class_name: "BlogPostImage", inverse_of: :blog_post
end
並且您需要確保在子模型上具有belongs_to
屬性:
class BlogPostImage
belongs_to :blog_post
end
你可以用兩種不同的方式來做到這一點。 一種是使用“作為”
has_many :tasks, :as => :jobs
或者
def jobs
self.tasks
end
顯然,第一個將是處理它的最佳方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.