我有3种型号User
,Feature
,UserFeature
启动Rails删除,而不是破坏嵌套属性
class User < ActiveRecord::Base
has_many :user_features
has_many :features, through: :user_features
end
class Feature < ActiveRecord::Base
has_many :user_features
has_many :users, through: :user_features
end
class UserFeature < ActiveRecord::Base
belongs_to :user
belongs_to :feature
end
我已经创造了在DB的许多功能,以及相关的功能与用户在用下面的代码创建用户
<%= form_for @user do |f| %>
// some user_fields
<% Feature.all.each do |feature| %>
<%= check_box "user[feature_ids][], feature.id %>
<% end %>
// submit button here
<% end %>
在我UserController
我有这个代码
class UserController < ApplicationController
def create
@user = User.new(permit_params)
@user.save
end
def update
@user = User.find(params[:id])
@user.update_attributes(permit_params)
end
private
def permit_params
params.require(:user).permit(:name, :email, user_feature_ids: [])
end
end
当我提交它时,会创建并更新用户,并在UserFeature
表中为我检查过的那些功能创建条目。
当如果我未选中任何功能,那么它将从UserFeature
这里删除相关记录没有任何问题,一切正常更新用户。
但是现在我想在user_feature删除时执行一些活动。
为此,我在UserFeature after_destroy :some_activity
写了一个回调
class UserFeature < ActiveRecord::Base
belongs_to :user
belongs_to :feature
after_destroy :some_activity
def some_activity
// some code
end
end
,但它不工作,当我检查为什么它不叫破坏电话时删除user_feature,我发现,它会调用一个SQL查询,而不是调用的destroy
未经检查的user_feature。
这就是为什么after
或before
destroy
回调不起作用。
任何人都可以告诉我,在删除UserFeature
时如何执行任何操作?
是的,我知道删除将不会运行任何回调,这就是为什么我问这个问题。我的问题的解决方案是什么“我需要在删除'UserFeature'时执行一些活动? –
我试过这个解决方案,但它只适用于after_add和before_add,仍然不适用于after_remove和before_remove –