编辑 - 现在解决了。见帖子的底部。感谢Rob.W指出我的默认方法是覆盖了所有内容,即使我试图更新值
我不能列出所有" Deals"在我的数据库中,属性“已解决”#39;设置为true。正如您将在rails控制台的下面脚本中看到的那样,我将对象更新为true,rails确认更新,但之后对象仍显示为false
我尝试了各种语法,无论有没有""等,都看过类似的问题,但他们没有解决我的问题。
1)db中没有显示任何内容:
[2] pry(main)> Deal.where(settled: true)
...
=> []
2)所以我自己更新一个,并且rails确认
[3] pry(main)> Deal.find(73).update(settled: true)
...
=> true
3)这是一个奇怪的部分:对已结算的真实交易的查询返回我刚刚创建的那个......但是它显示好像是假的!
[4] pry(main)> Deal.where(settled: true)
Deal Load (0.8ms) SELECT "deals".* FROM "deals" WHERE "deals"."settled" = 't'
=> [#<Deal:0x007fad593dc468
id: 73,
amount: 45.0,
description: "no description yet",
settled: false,
created_at: Wed, 10 Jun 2015 19:52:05 UTC +00:00,
updated_at: Wed, 10 Jun 2015 21:14:36 UTC +00:00,
payer_id: 55,
receiver_id: 57>]
请注意,在Deal模型的deal.rb文件中,我使用以下内容将默认值false设为&#39;已结算&#39;
def defaults
self.description = 'no description yet'
self.settled = 'false'
end
编辑 - 解决问题的方法 1)我删除了默认功能,因为它阻止了任何进一步的覆盖。相反,我写了一个迁移来添加默认值,根据这个非常有趣的线程 How to set default values in Rails?
def change
change_column :table_name, :column_name, :type, default: "Your value"
end
2)最后一招是查询真值的语法。在self.update(已解决:true)时,rails为对象提供值&#34; t&#34;,而不是true,不是&#39; true&#39; - 因此,正确的查询代码是
@history = current_user.all_deals.select {|deal| deal.settled == 't'}.sort_by(&:created_at)
答案 0 :(得分:0)
编辑 - 问题的解决方案1)我删除了默认功能,因为它阻止了任何进一步的覆盖。相反,我写了一个迁移来添加默认值,根据这个非常有趣的线程在Rails中设置默认值的正确方法
def change
change_column :table_name, :column_name, :type, default: "Your value"
end
2)最后一招是查询真值的语法。在self.update(sett:true)下,rails给对象赋值“t”,而不是true,而不是'true' - 因此查询的正确代码是
@history = current_user.all_deals.select do |deal|
deal.settled == 't'
end.sort_by(&:created_at)