186 在我的用户模型中,我可以有: has_many :tasks 在我的任务模型中: belongs_to :user 然后,假设外键“ user_id”存储在任务表中,我可以使用: @user.tasks 我的问题是,如何声明has_many关系,以便可以将用户任务称为: @user.jobs ... 要么 ... @user.foobars 谢谢你 ruby-on-rails has-many — 橙皮 source 7 我会厌倦使用Task作为类名-这是一个Rails保留字,可能会在以后引起奇怪的问题:reservedwords.herokuapp.com — Joshua Pinter 2012年
361 试一下: has_many :jobs, foreign_key: "user_id", class_name: "Task" 注意,它:as用于多态关联。 — 山姆藏红花 source 1 谢谢您还包含外键-解决了我类似但不同的问题。 — Niels Abildgaard 2014年 4 这是否需要在Task方面进行任何特殊设置,还是通常belongs_to足够? — 明亮的星星, 1 仅供参考:这也适用于has_and_belongs_to_many关联,只需要“ foreign_key”部分 — David Moritz
55 你也可以使用alias_attribute,如果你仍然希望能够把它们称为任务,以及: class User < ActiveRecord::Base alias_attribute :jobs, :tasks has_many :tasks end — Pwnrar source
3 要完成@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 — 吉斯 source
0 如果您通过使用has_many,并且要使用别名: has_many :alias_name, through: model_name, source: initial_name — A.阿斯卡罗夫 source
-61 您可以通过两种不同的方式执行此操作。一种是使用“ as” has_many :tasks, :as => :jobs 要么 def jobs self.tasks end 显然,第一个将是处理它的最佳方法。 — 布伦特·柯比 source 谢谢,听起来很完美。不幸的是,这无法正常工作:用户模型:has_many:tasks,:as =>:created_tasks控制器:@created_tasks = @ user.created_tasks -----#<User:0xb6050b5c>中TasksController#index未定义方法'created_tasks'中的NoMethodError — Doctororange 4 实际上,第二种方法对于创建关联的别名非常有用。 — jpgeek 2012年 正如Sam所说,这似乎不合适,因为:是用于多态关联的。 — Michael K Madison