Помогите установить полиморфные отношения в моделях - PullRequest
0 голосов
/ 10 июня 2011

Модели:

class Thread < ActiveRecord::Base
  has_many :threaded, :through => :threaded, :foreign_key => :thread_id

class ThreadFeed < ActiveRecord::Base
 belongs_to :threaded, :polymorphic => true

Поля модели

Thread (id)
ThreadFeed (id, thread_id, threaded_id, threaded_type)

Проблема с:

@thread.threaded

Rails использует (thread_id, thread_type) в качестве внешнего ключа, и я хочу, чтобы thread_id был внешним ключом.

Ответы [ 2 ]

0 голосов
/ 10 июня 2011

Первая проблема заключается в том, что Thread не знает, что такое фид:

class Thread < ActiveRecord::Base
    has_many :feeds, :through => :thread_feeds, :as => :feeded
    has_many :thread_feeds

class ThreadFeed < ActiveRecord::Base
     belongs_to :feeded, :polymorphic => true

Вторая проблема - сложность полиморфности.Вот отличная статья об этом: http://blog.hasmanythrough.com/2006/4/3/polymorphic-through

0 голосов
/ 10 июня 2011

Взгляните на этот Railscast, Полиморфизм

. Он поможет вам лучше понять, как работает Полиморфизм.

Первая проблема, которую я заметил, это то, что она должна бытьчерез: поток, а не: с резьбой

class Thread < ActiveRecord::Base
  has_many :threadfeeds, :as => :threaded

В Railscast он имеет:

class Comment < ActiveRecord::Base
  belongs_to :commentable, :polymorphic => true
end

class Article < ActiveRecord::Base
  has_many :comments, :as => :commentable
end

class Photo < ActiveRecord::Base
  has_many :comments, :as => :commentable
  #...
end

class Event < ActiveRecord::Base
  has_many :comments, :as => :commentable
end
...