Mysql Rails模型未与数据库正确同步

Mysql Rails模型未与数据库正确同步,mysql,ruby-on-rails,Mysql,Ruby On Rails,我有一个名为Merchant的rails模型,具有属性name和id。我遇到了一个问题,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> SELE

我有一个名为
Merchant
的rails模型,具有属性
name
id
。我遇到了一个问题,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”,这是我一直困惑的问题

值得注意的是,最近我用新数据更新了他们使用的数据库,这可能是造成差异的原因吗?也许rails缓存数据,所以还没有查看更新的数据库?我被难住了,任何帮助都是感激的

编辑:
这里有另一条线索可以补充这个谜团:运行
Merchant。其中(:name=>nil)
返回空列表!为什么它不选择id为550的商户?

商户的输出应该是什么。其中(:id=>550)。first.name
?。可能是您创建了一个商户,但您只是没有定义名称,所以它得到了默认值
nil
为什么要这样做。首先,当您选择一条记录时

Merchant.find(550).name
应该给你你的记录

试一试


获取模型的第一条记录。

Merchant.where(:id=>550)。第一条应该是与merchants表中id=550的行关联的商户模型。该问题询问为什么其中一个有名称,而另一个没有
商户。其中(:id=>550)
返回与条件
:id=>550
匹配的所有商户的列表(因此我为什么包括.count,以仅显示一个匹配的商户)。该列表的第一个元素是相关的商户。您是否有一个标识符id不唯一的模型???你应该考虑重构你的模型。当您在RoR中创建新模型时,主索引的默认列是“id”。好的,如果您使用Merchant.where('id=550')。首先?将我的答案更改为.find(550),这不会给您一个集合,只给您一条记录。
1.9.2p320:002>Merchant.find(550)=Merchant.where(:id=>550)。first=>true
。它们是等价的语句consider,为我们提供了整个模型,以及获取整个记录时的输出。我不想这样做的原因是整个记录包含敏感数据,例如FTP user/pass。我可以告诉您,rails模型和数据库在几个非名称字段上达成一致。
Merchant.first.name