1

내보기에 다형성 연관을 어떻게 표시합니까? 나는 다음과 같은 모델을 가지고있다.보기의 다형성 연관

class Blog < ActiveRecord::Base 
    belongs_to :users 
    has_one :category, :as => :categorizable 
end 

class Category < ActiveRecord::Base 
    belongs_to :categorizable, :polymorphic => true 
end 

class User < ActiveRecord::Base 
    has_many :blogs 
    has_many :categories, :as => :categorizable 
end 

그러나 문제는 범주를 표시하려고 할 때 문제가 발생한다는 것입니다.

rails console 
=> user = User.first 
=> user.blogs 
[] 
=> user.categories 
[] 
=> category = user.categories 
=> category = Category.new 
=> category.name = "Education" 
=> category.save! 
true 
=> user.categories 
[#<Category id: 1, name: "Education", categorizable_id: 1, categorizable_type: "User", created_at: "...", updated_at: "...">] 
=> user.blogs.create(:title => "...", :body => "...", :category => category) 
[#<Blog id: 1, user_id: 1, title: "...", body: "...", created_at: "...", updated_at: "...">] 
=> blogs = user.blogs.all 
=> blogs.each do |blog| 
     puts blog.category 
    end 
nil 
=> blogs.first.category 
[#<Category id: 1, name: "Education", categorizable_id: 1, categorizable_type: "User", created_at: "...", updated_at: "...">] 

각 블록을 사용할 때 blog.category가 nil을 반환하는 이유는 무엇입니까? 내보기를 통해 내 다형성 모델의 항목을 어떻게 표시합니까?

업데이트 : 디자인은, 사용자로, 나는 카테고리를 만들고, 내 블로그에 할당 할 수 있도록하려는있다

. 각 블로그에는 카테고리가 하나 있는데 범주 모델을 통해 범주화 할 수있는 블로그로 액세스하고 싶습니다.

로직이 말하려고하는 것처럼 작동한다면 정말 좋겠지 만 현재는 그렇지 않습니다. 다형성 모델은 우아해야하지만, 지금은 다형성이 나를 위해 짜증을 내며 사용할 수 없습니다. 나는 여전히 누군가가 나를 더 나은 해결책을 제공 할 수 있도록 기다리고있다.

답변

4

디자인에 결함이 있습니다. 당신이 블로그를 추가하고 동일한 범주에 할당 할 때

> cat 
# Category id: 1, name: "Education" categorizable_id:1 categorizable_type: "User" 

:

user.blogs.create(:category=>cat) 

그것은 다형성 유형을 덮어을하고

user = User.create 
cat = user.categories.create(:name=>"Education") 

을 지금이 하나 개의 카테고리 : 다음 사항을 고려 id :

# UPDATE "categories" SET "categorizable_type" = 'Blog', "categorizable_id" = 1, 
    "updated_at" = '2011-02-27 06:20:29.968336' WHERE ("categories"."id" = 1) 

이제 범주가 더 이상 사용자와 연결되어

user.reload 
user.categories # => [] 

당신은 정말 여기에 많은 관계로 많은 모델을 시도하고 있습니다. UserCategory 및 BlogCategory에 대한 조인 테이블을 추가하고 다형성을 제거하는 것이 좋습니다. 이는 도움이되지 않습니다.

1

내 이전 답변을 용서해주십시오. zetetic의 답변은 절대적인 의미를 갖습니다. 다형성을 피하십시오.

0

업데이트 : 나는 다형성 모델이 그 길이 아니라고 결론을 내렸고 똑같은 일을하는 좋은 'STI로 해결했습니다.