Fel*_*lix 8 mysql ruby-on-rails reference ruby-on-rails-4
我想从我的数据库中删除一些东西.该值引用其他一些表.
错误是:
Mysql2::Error: Cannot delete or update a parent row: a foreign key constraint fails
Run Code Online (Sandbox Code Playgroud)
我该如何正确解决这个问题?
如果我添加一些像删除级联一样的约束,其他值将不会被删除吗?
编辑:
def delete
@vid = Movie.find params[:id]
@vid.delete
redirect_to :action => :add
end
Run Code Online (Sandbox Code Playgroud)
更新模型
movie.rb
class Movie < ActiveRecord::Base
has_many :comments, :dependent => :destroy
has_many :ratings
belongs_to :channel
has_and_belongs_to_many :tags
has_and_belongs_to_many :categories
mount_uploader :video, MovieUploader
Run Code Online (Sandbox Code Playgroud)
comment.rb
class Comment < ActiveRecord::Base
belongs_to :movie
belongs_to :user
belongs_to :rating
Run Code Online (Sandbox Code Playgroud)
确保您的父Model.rb具有
has_many :model, :dependent => :delete_all
Run Code Online (Sandbox Code Playgroud)
这样可以确保在删除父模型后删除所有数据.
比如你有Post.rb和Comment.rb
Post.rb
has_many :Comments, :dependent => :delete_all
Run Code Online (Sandbox Code Playgroud)
因此,当您删除帖子时,所有相应的评论也将被删除.
希望它有所帮助
干杯
如果您使用了创建外键ActiveRecord::Migration,它将ON DELETE RESTRICT默认使用(即,与您想要的相反:如果有来自其他表的引用的条目,则不会删除行条目).
您需要更改要使用的迁移ON DELETE CASCADE:
class CreateChild < ActiveRecord::Migration
def change
create_table :child do |t|
t.references :parent, foreign_key: {on_delete: :cascade}
end
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7304 次 |
| 最近记录: |