1

我有一个Merchant带有属性nameid. 我遇到了一个问题,rails 和我的数据库在某个商家的名称上存在分歧。

这是 Rails 发生的事情:

1.9.2p320 :001 > Merchant.where(:id=>550).count 
=> 1 
1.9.2p320 :002 > Merchant.where(:id=>550).first.name
=> nil 

这就是mysql发生的事情:

mysql> SELECT name FROM merchants WHERE id=550;
+----------+
| name     |
+----------+
| Testname |
+----------+
1 row in set (0.00 sec)

根据FlyersAdmin::Application.config.database_configuration[::Rails.env]我的第一个代码窗口中rails使用的数据库与第二个窗口中mysql使用的数据库相同。为什么商家的名字是nil“Testname”而不是“Testname”是我难倒的。

值得注意的是,最近我用新数据更新了他们都使用的数据库,这是否可能导致差异?也许 Rails 缓存了数据,所以还没有查看更新的数据库?我很难过,任何帮助表示赞赏。

编辑:这是另一个增加谜团的线索:运行Merchant.where(:name => nil)返回空列表!为什么不选择 id 为 550 的商家?

4

2 回答 2

0

这应该是什么输出Merchant.where(:id=>550).first.name?可能您创建了一个 Merchant,但您只是没有定义名称,因此它获得了默认值nil

于 2013-03-02T17:21:22.490 回答
0

无论如何,当您选择一条记录时,为什么要执行 .first ?

Merchant.find(550).name

应该给你你的记录。

尝试

Merchant.first.name

获得模型的第一条记录。

于 2013-03-02T18:02:45.407 回答