[ruby-on-rails] 별명 이름을 가진 Rails has_many

내 사용자 모델에서는 다음을 가질 수 있습니다.

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에 사용되는 다형성 협회 .


답변

alias_attribute여전히 작업으로 참조 할 수있는 경우 에도 사용할 수 있습니다.

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

  has_many :tasks
end


답변

@SamSaffron의 답변을 완료하려면 :

당신은 사용할 수 있습니다 class_name중 하나와 foreign_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 through를 사용하고 별명을 지정하려는 경우 :

has_many :alias_name, through: model_name, source: initial_name


답변

이 두 가지 방법으로 할 수 있습니다. 하나는 “as”를 사용하는 것입니다

has_many :tasks, :as => :jobs

또는

def jobs
     self.tasks
end

분명히 첫 번째 방법이 가장 좋은 방법입니다.


답변