我正在做一个简单的待办事项应用,我只有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
。* FROMtags
INNER JOINtags_todos
ONtags
。{{1 }} =id
。tags_todos
WHEREtag_id
。tags_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
答案 0 :(得分:0)
我发现了一些可能是正确答案的东西。在这种情况下,我想我只能通过使用一个我不需要的很多关系来扭转它。
请注意,该表需要按字母顺序命名,即 categories_stories表而不是stories_categories - 这是 使其发挥作用的惯例。