私は単純な todo アプリを実行しています。ここでは、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
しかし、タグまたは todo を削除しようとすると、タグと todo の間の接続をまだ設定していないにもかかわらず、次のエラーが表示されます。
Mysql2::エラー: テーブル 'wa2do.tags_todos' が存在しません: SELECT
tags
.* FROMtags
INNER JOINtags_todos
ONtags
.id
=tags_todos
.tag_id
どこtags_todos
で。todo_id
= 298486374
Railsがtags_todosテーブルのアイデアをどこで取得したかはわかりませんが、移行中に私のテーブルがtodo_tagsと呼ばれていました。実際には演習であり、彼らはこの名前を使用するように要求しました.
次のような 2 つのモデルがあります。 Todo クラス Todo < ActiveRecord::Base attr_accessible :task_name, :due_date, :finished, :priority
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
終わり
および Tag クラス Tag < ActiveRecord::Base attr_accessible :tag_name
has_and_belongs_to_many :todos
validates_uniqueness_of :tag_name, :on => :create, :message => "Tag name must be unique"
end
そして私のコントローラー
def destroy
@todo = Todo.find(params[:id])
@todo.destroy
respond_to do |format|
format.html { redirect_to todos_url }
format.json { head :no_content }
end
end