gpt4 book ai didi

ruby-on-rails - Rails 3 禁用模型不删除

转载 作者:行者123 更新时间:2023-12-04 02:22:06 24 4
gpt4 key购买 nike

我有几个模型,我希望用户“禁用”它而不是销毁它。这些模型有一个禁用 bool 值。试图使这项工作。

当前在 application_controller.rb 中

辅助方法:禁用

def disable(model)
@model = "#{model}".find(params[:id])
@model.update_attribute(:disable => true)
flash[:notice] = "Successfully disabled #{model}."
redirect_to company_ + "#{model}".pluralized + _url(current_company)
end

是否必须为每个要使用此功能的路径在路径中创建一个新路径?如果我能做类似 destroy 方法的事情,那就太理想了。

最佳答案

我可能会使用禁用方法扩展 ActiveRecord,以便您可以像调用 @model.destroy() 一样调用 @model.disable()。这样您就可以保留所有默认路由,只需更改 Controller 中的 destroy 操作以尝试使用 disable() 而不是 destroy()。

大概是这样的:

module MyDisableModule
def self.included(recipient)
recipient.class_eval do
include ModelInstanceMethods
end
end

# Instance Methods
module ModelInstanceMethods

#Here is the disable()
def disable
if self.attributes.include?(:disabled)
self.update_attributes(:disabled => true)
else
#return false if model does not have disabled attribute
false
end
end
end
end

#This is where your module is being included into ActiveRecord
if Object.const_defined?("ActiveRecord")
ActiveRecord::Base.send(:include, MyDisableModule)
end

然后在你的 Controller 中:

def destroy
@model = Model.find(params[:id])
if @model.disable #instead of @model.destroy
flash[:notice] = "Successfully disabled #{@model.name}."
redirect_to #wherever
else
flash[:notice] = "Failed to disable #{@model.name}."
render :action => :show
end
end

请注意,在此示例中,disabled 是属性,disable 是使模型禁用的方法。

关于ruby-on-rails - Rails 3 禁用模型不删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5156350/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com