我将导轨模型设置为:
class Master < ActiveRecord::Base
belongs_to :user
has_many :submasters
serialize :subdocs, Array
end
它有一个序列化array
submaster_docs
,其中存储了已连接id
的{{1}},subdocs
的模型为:
Subdocs
现在我有一个rails方法,当用户点击删除按钮时删除class Subdocs < ActiveRecord::Base
belongs_to :user
end
。
在删除子代码条目时,我还要从subdoc
中删除Subdocs
的ID,这样即使在删除{{1}之后也不会尝试在它们之间创建关联}
Master
的我的数据库条目如下所示:
Subdocs
Master
的数据库条目:
<ActiveRecord::Relation [#<Master id: 3, user_id: 1, name: "Being Batman", description: "Every man who has lotted here over the centuries, ...", subdocs: ["5"]>]>
例如,如果用户删除了子文件5,那么我想从所有subdoc
的{{1}}数组中删除该值
我删除子文件的方法如下:
<ActiveRecord::Relation [#<Subdoc id: 5, user_id: 1, name: "subdoc1.pdf">]>
但这会引发错误:subdocs
我该如何纠正?谢谢!
答案 0 :(得分:2)
你不想在这里使用数组。特别是不是序列化数组:
首先创建迁移rails g migration add_master_to_subdocs
class AddMasterToSubdocs < ActiveRecord::Migration[5.0]
def change
add_reference :subdocs, :master, foreign_key: true
remove_column :subdocs, :user_id
end
end
我们也删除了user_id
列,因为它不再需要:
class Master < ActiveRecord::Base
belongs_to :user
has_many :submasters
has_many :subdocs
end
class Subdocs < ActiveRecord::Base
belongs_to :master
has_one :user, through: :master
end
答案 1 :(得分:0)
虽然我同意max并且您不应该使用此架构,假设您保持原样,您将需要从master中的数组中删除该项并保存master。
def destroy
@masters = {}
@subdoc = Subdoc.find(params[:id])
@masters = current_user.user.masters
@masters.each do |master|
if master.subdocs.index(params[:id])
master.subdocs.delete(params[:id])
master.save!
end
end
@subdoc.destroy
return render :status => 200, :json => { :success => true }
end