我有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 –