为什么在引用rails中的fixture时id值会发生变化

时间:2016-09-27 19:46:04

标签: ruby-on-rails ruby fixtures

我有以下装置。

users.yml

first_user:
  name: User1
  password_hash: <%= BCrypt::Engine.hash_secret('password', '$2a$10$xKPXy2QabH6ThBjo7gNB8O') %>
  password_salt: $2a$10$xKPXy2QabH6ThBjo7gNB8O
  role: 1

stores.yml
one:
  name: MyFirstString
  user_id: <%= ActiveRecord::FixtureSet.identify(:first_user) %>

但是,当我加载Store.first.user_id时,我的值为979462526User.first.id980190962。我认为这些价值观不应该有所不同。如果有的话,请纠正我的理解或指出我的代码中的错误。模型结构是:用户有很多商店。

1 个答案:

答案 0 :(得分:1)

我认为ActiveRecord::FixtureSet.identify(:first_user)first_user灯具本身无关 请参阅source code

根据评论,它只生成给定标签的标识符。在你的情况下,它是:first_user

所以你可以打开rails console并手动完成

Zlib.crc32('first_user') % (2 ** 30 - 1) 
# => 979462526

你会获得相同的数字。
所以它与任何特定的灯具无关(因为我没有任何灯具)。

<强>更新

也许您应该尝试使用关联而不是直接链接ID。

# users.yml
first_user:
  name: User1
  ...

# stores.yml
one:
  name: MyFirstString
  user: first_user

这样我希望它应该像预期的那样工作。