簡體   English   中英

Rails has_many 具有別名

[英]Rails has_many with alias name

在我的用戶模型中,我可以:

has_many :tasks

在我的任務模型中:

belongs_to :user

然后,假設外鍵“user_id”存儲在任務表中,我可以使用:

@user.tasks

我的問題是,如何聲明 has_many 關系,以便我可以將用戶的任務稱為:

@user.jobs

... 或者 ...

@user.foobars

多謝了。

試一試:

has_many :jobs, foreign_key: 'user_id', class_name: 'Task'

請注意, :as用於多態關聯

此外, has_many 的 foreign_key 選項

如果您仍然希望能夠將它們稱為任務,也可以使用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_nameforeign_keyinverse_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM