2013-06-15 4 views
0

기존 연결을 추가하려고하는 기능에 사용할 최상의 연결 및 새로운 모델을 결정하는 데 도움이 될지 궁금합니다. 이 앱을 통해 사용자는 다른 사용자가 답변 한 질문을 할 수 있습니다. 질문을 게시 할 때 사용자는 자신이 속한 Province를 나타내며 (질문은 특정 위치이기 때문에) 사용자는 질문에 대한 하나 이상의 범주도 선택합니다. 질문이 만든 후에 따라서, 나는 기능을 갖춘 사용자가 내가 (질문에 대한 답변) 일부 사용자 수 있도록하면된다 싶습니다 무엇이이 기능을 효율적으로 구현하기 위해 어떤 모델/연결을 사용해야합니까?

 def show  
     @question = Question.find(params[:id]) 
     puts @question.categories.first.id  #id = 2 for Tourism, for example 
     puts @question.province_id  #id = 6 for Ontario, for example 

    end 

같은 카테고리 (선택 하나 개의 범주) 및 지역 정보를 얻을 수 있어요 프로필은 views/question/show 페이지 옆에 표시됩니다. 따라서 위의 예에 따르면 show 액션 질문에서 온타리오 주 관광 카테고리의 주요 사용자를 쿼리합니다.

아마도 수천 명의 사용자가 있지만 기능을 갖춘 소수의 사용자 풀만있을 것이라는 점을 감안할 때, 나는 그 정보를 사용자 모델에 저장하는 것이 가장 좋다고 생각하지는 않지만 어쩌면 아마도 주 사용자 프로필, 지방 (전문가 인 경우) 및 카테고리 (전문가 인 경우)에 연결되지만 '지방 및 카테고리'와 동시에 일치하는 경우에만 끌어 올려집니다 따라서 카테고리가 "Tourism"이고 주 (Province)가 "Ontario"인 featured_user는 질문이 "Tourism"범주와 "Ontario"지방에만있는 경우에만 끌어 올려집니다.

features_user 모델을 만들면 효율적으로 작동하도록 이러한 다른 모델로 어떤 열과 연관을 만들어야합니까? 그리고/또는 기존 모델에 무엇을 추가해야합니까? 나는 has_and_belongs_to_many 또는 has_many : through 또는 간단한 foreign 키를 사용하려고 노력해야하는지 잘 모르겠다. 나의 본능은 그것을해야 할 것보다 더 복잡하게 만드는 것이다.

오른쪽 지금

Province.rb 
has_many :questions 

Question.rb 
belongs_to :province 
has_many :categorizations 
has_many :categories, through: :categorizations 

Category.rb 

has_many :categorizations 
has_many :questions, through: :categorizations 

Categorization 

belongs_to :question, touch: true 
belongs_to :category, touch: true 

User.rb 
has_many :questions #i.e. questions they've asked 
has_many :answers #i.e. questions they've answered 

답변

2

나는 기능을 갖춘 사용자 모델이 가장 좋은 방법이라고 생각합니다. 이것은 모든 특색있는 사용자 로직을 한 곳에서 캡슐화하고 아주 적은 수의 사용자에 대해서만 사용되는 다른 모델에 속성 열을 추가하지 않고 구현할 수 있습니다. 여기에 내가 이것을 구현하는 것이 방법입니다

# CreateFeaturedUsers (migration) 
create_table :featured_users do |t| 
    t.references :user 
    t.references :province 
    t.references :category 
end 

# FeaturedUser (model) 
belongs_to :user 
belongs_to :province 
belongs_to :category 

# User (model) 
has_many :featured_users 

# Question (model) 
def featured_users 
    User.joins(:featured_users).where(featured_users: {province: this.province, category: this.category}) 
end 

그러나 내가 제대로에게 뭔가 다른 사용자에게 사용자 만의 관계를 표현하지 않는 모델로 다음 FeaturedUser 이름을 것입니다. 어쩌면 Featuring이 더 나은 이름 일 것입니다.

관련 문제