Has_many:通过关联找不到

时间:2012-02-29 17:00:07

标签: ruby-on-rails ruby ruby-on-rails-3 has-many model-associations

我有两个可以添加标签的模型。

  • 播放器
  • 票务

我有Tag模型属于两者,所以我有两个连接模型

  • tag_ticket
  • tag_player

我收到Could not find the association :tag_tickets in model Ticket错误,但我的关联就在那里。

class Ticket < ActiveRecord::Base
  has_many :tag_tickets
  has_many :tags, :through => :tag_tickets
end

我只关注Ticket模型,但玩家模型看起来应该相似。

这是我对TagTicket

的迁移
class CreateTagTickets < ActiveRecord::Migration
  def change
    create_table :tag_tickets do |t|
      t.integer :ticket_id
      t.integer :tag_id

      t.timestamps
    end
  end
end

1 个答案:

答案 0 :(得分:1)

您需要首先指定:tag_tickets join:

class Ticket < ActiveRecord::Base
  has_many :tag_tickets
  has_many :tags, :through => :tag_tickets
end

您还需要在TagTicket模型中指定联接:

class TagTicket < ActiveRecored::Base
  belongs_to :ticket
  belongs_to :tag
end

或者,您可以跳过所有这些并使用habtm连接(仅在tag_tickets连接真正用作连接并且没有自己的主键时才推荐)。在这种情况下,您将没有TagTicket模型(只是一个tag_tickets表),Ticket模型将如下所示:

class Ticket < ActiveRecord::Base
  has_and_belongs_to_many :tags
end