Rails混合连接表名中有许多属于多个

时间:2013-03-24 10:57:20

标签: ruby-on-rails-3.2 relationship foreign-key-relationship rails-activerecord

我正在做一个简单的待办事项应用,我只有todo和标签模型以及它们之间的has_many_belongs_to_many关系。我还为连接设置了todo_tags迁移,如下所示:

class CreateTodoTagsJoinTable < ActiveRecord::Migration
 def up
  create_table :todo_tags, :id => false do |t|
    t.integer :todo_id
    t.integer :tag_id
  end

    add_index :todo_tags, [:todo_id, :tag_id]
  end

  def down
   drop_table :todo_tags
  end
 end

但是当我尝试删除任何标签或待办事项时,我得到以下错误,尽管我还没有在任何标签和待办事项之间建立任何连接。

  

Mysql2 ::错误:表'wa2do.tags_todos'不存在:SELECT tags。* FROM tags INNER JOIN tags_todos ON tags。{{1 }} = idtags_todos WHERE tag_idtags_todos = 298486374

我不知道Rails获取tags_todos表的想法,在迁移时我的表名为todo_tags。 Actualy这是一个练习,他们要求使用这个名字。

我有两个模型,他们看起来像这样: 去做   Todo等级&lt;的ActiveRecord :: Base的      attr_accessible:task_name,:due_date,:finished,:priority

todo_id

和Tag     class Tag&lt;的ActiveRecord :: Base的       attr_accessible:tag_name

 validate :task_name, :presence => true
 validate :due_date_in_future?

 has_and_belongs_to_many :tags

 def due_date_in_future?
  due_date > DateTime.current
 end

和我的控制器

  has_and_belongs_to_many :todos

  validates_uniqueness_of :tag_name, :on => :create, :message => "Tag name must be unique"

end

1 个答案:

答案 0 :(得分:0)

我发现了一些可能是正确答案的东西。在这种情况下,我想我只能通过使用一个我不需要的很多关系来扭转它。

  

请注意,该表需要按字母顺序命名,即   categories_stories表而不是stories_categories - 这是   使其发挥作用的惯例。