_destroy 不能在带有 Rails 4 的 Coocon gem 中工作

Posted

技术标签:

【中文标题】_destroy 不能在带有 Rails 4 的 Coocon gem 中工作【英文标题】:_destroy isn't working in Coocon gem with Rails 4 【发布时间】:2015-07-01 07:17:40 【问题描述】:

我有同样的问题 one

但是那个解决方案对我没有帮助。 这是我的强大参数:

def request_params
   params.require(:request).permit(:name, :address, :phone, :mobile, :type,
     :filled_cartridges_attributes => [:cartridge_name,:client_id,,
				:count,:_destroy,:id],							

所以我有 :_destroy 和 :id。前面的那个人忘记在强参数中添加 :id 了。添加一个 id 解决了他的问题。

这是我的请求模型:

has_many :filled_cartridges, inverse_of: :request, dependent: :destroy
	accepts_nested_attributes_for :filled_cartridges, :reject_if => :all_blank, allow_destroy: true

这是提交后参数的样子:

request: 
...some params....
filled_cartridges_attributes: !ruby/hash:ActionController::Parameters
    '0': !ruby/hash:ActionController::Parameters
      cartridge_name: HP LaserJet3000
      _destroy: 'false'
      id: '1'
    '2': !ruby/hash:ActionController::Parameters
     cartridge_name: new 9
     _destroy: '1'
     id: '13'

这里第二个应该被销毁。 但事实并非如此。

【问题讨论】:

如何为模型分配参数? @BroiSatse 你是什么意思? 你的控制器中有你的参数,但是你用它们做什么呢?你能显示控制器的动作吗?另外,第一个对象更新了吗? @BroiSatse,我的控制器方法有太多与销毁无关的代码。在更新操作中,我更新了字段,它可以工作,但是没有删除代码,据我了解,由于_destroy 参数,它应该自动删除。宝石茧什么也没说。在 railscasts 教程中,讲师说如果提供了 _destroy,它会自动销毁。我说的对吗? 是的,您是对的,前提是您使用的是filled_cartridges_attributes= 方法(assign_params 和其他方法在内部使用该方法)。这只会将关联记录标记为销毁,在您调用 save 之前它不会销毁模型,因此分配参数的方式很重要。 【参考方案1】:

您应该在允许的参数上将 :_destroy 和 :id 添加到指定的嵌套属性中。

【讨论】:

以上是关于_destroy 不能在带有 Rails 4 的 Coocon gem 中工作的主要内容,如果未能解决你的问题,请参考以下文章

使用dependent: :destroy 在rails 上不起作用

Rails - 在before_destroy回调时取消销毁

Rails 4删除受模板JS影响的链接

自定义 Mongoid 4.0.0 _id 包含 . (点)不能通过参数查询(Rails 4)

带有引导程序 3.3.4 的字形图标在 rails 4.2.1 中不起作用

rails :dependent=>:destroy 被忽略