_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回调时取消销毁
自定义 Mongoid 4.0.0 _id 包含 . (点)不能通过参数查询(Rails 4)