gpt4 book ai didi

ruby-on-rails - rails gem Make_flaggable 不保存到数据库

转载 作者:行者123 更新时间:2023-11-29 12:21:18 24 4
gpt4 key购买 nike

刚刚完成了教程,设置了所有内容。当我运行命令行测试时,似乎方法正在获取正确的数据,但没有将它们保存到数据库中。

irb(main):009:0> u.flag(s, :promote)
MakeFlaggable::Flagging Load (0.0ms) SELECT "flaggings".* FROM "flaggings" WHERE "flaggings"."flagger_id" = 2 AND "flaggings"."flagger_type" = 'User' AND "flaggings"."flaggable_type" = 'Scribble' AND "flaggings"."flaggable_id" = 48 AND "flaggings"."flag" = 'promote' LIMIT 1
(0.0ms) BEGIN
SQL (0.0ms) INSERT INTO "flaggings" ("created_at", "flag", "flaggable_id", "flaggable_type", "flagger_id", "flagger_type", "updated_at") VALUES ($1, $2, $3, $4, $5, $6, $7) RETURNING "id" [["created_at", Wed, 12 Mar 2014 20:15:45 UTC +00:00], ["flag", nil], ["flaggable_id", nil], ["flaggable_type", nil], ["flagger_id", nil], ["flagger_type", nil], ["updated_at", Wed, 12 Mar 2014 20:15:45 UTC +00:00]]
(12.0ms) COMMIT
=> #<MakeFlaggable::Flagging id: 10, flaggable_type: nil, flaggable_id: nil, flagger_type: nil, flagger_id: nil, flag: nil, created_at: "2014-03-12 20:15:45", updated_at: "2014-03-12 20:15:45">

如您所见,该方法选择了所有正确的数据,但只保存了 nils。有谁知道这可能是什么问题?

最佳答案

我能够重现该问题。我使用了 rails 3.2.16 和来自 github 的 gem。两个设置似乎导致了这个问题。首先,您必须在 application.rb 中包含这一行:

config.active_record.whitelist_attributes = true

另一个设置是

config.active_record.mass_assignment_sanitizer = :strict

如果您的环境文件中有上述行,当您尝试 user.flag(article, :promote) 时应用程序会抛出异常,因为 gem 不会将其属性列入白名单。

我猜你没有严格的设置,因为没有它,应用程序的行为就像你的应用程序一样。它不会抛出异常,只是忽略值并用空值保存记录。(注意:虽然应用程序应该给你这样的警告:

WARNING: Can't mass-assign protected attributes: flaggable, flagger, reason

但很容易在日志中忽略它)。

现在,我们知道似乎是什么问题,我们可以尝试修复它。在不更改 gem 中的任何内容的情况下,您可以通过将 application.rb 中的 true 更改为 false 来禁用 whitelist_attributes

然而,这不是一个正确的修复,只是一个展示它如何工作的解决方法,gem 应该注意它自己的属性,它不应该要求你为你的应用程序使用特定的设置(例如,完全禁用 whitelist_attributes )

关于ruby-on-rails - rails gem Make_flaggable 不保存到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22363025/

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