web-dev-qa-db-ja.com

Rails has_manyとエイリアス名

私のユーザーモデルでは、次のことができます。

has_many :tasks

私のタスクモデルでは:

belongs_to :user

次に、外部キー「user_id」がtasksテーブルに保存されていると仮定すると、次を使用できます。

@user.tasks

私の質問は、ユーザーのタスクを次のように参照できるように、has_many関係をどのように宣言するかです。

@user.jobs

... または ...

@user.foobars

ヒープに感謝します。

176
doctororange

これを試してください:

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

:asは、 多態的な関連付け に使用されることに注意してください。

339
Sam Saffron

タスクとしても参照できるようにする場合は、alias_attributeを使用することもできます。

class User < ActiveRecord::Base
  alias_attribute :jobs, :tasks

  has_many :tasks
end
44
Pwnrar

@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
1
Ghis