我正在针对现有数据库构建新的Rails应用程序。到目前为止我有一个模型看起来像:
class User < ActiveRecord::Base
self.table_name = 'user'
self.primary_key = 'name'
end
当我跳入控制台并尝试User.find("Bob")
并获得
User Load (23.4ms) SELECT `user`.* FROM `user` WHERE `user`.`name` = '--- !ruby/object:ActiveRecord::StatementCache::Substitute {}\n' LIMIT 1
ActiveRecord::RecordNotFound: Couldn't find User with 'name'=Bob
from /var/lib/gems/2.1.0/gems/activerecord-4.2.1/lib/active_record/core.rb:155:in `find'
from (irb):3
from /var/lib/gems/2.1.0/gems/railties-4.2.1/lib/rails/commands/console.rb:110:in `start'
from /var/lib/gems/2.1.0/gems/railties-4.2.1/lib/rails/commands/console.rb:9:in `start'
from /var/lib/gems/2.1.0/gems/railties-4.2.1/lib/rails/commands/commands_tasks.rb:68:in `console'
from /var/lib/gems/2.1.0/gems/railties-4.2.1/lib/rails/commands/commands_tasks.rb:39:in `run_command!'
from /var/lib/gems/2.1.0/gems/railties-4.2.1/lib/rails/commands.rb:17:in `<top (required)>'
from bin/rails:4:in `require'
from bin/rails:4:in `<main>'
尝试User.find('Bob')
让我得到同样的东西。
如果我尝试User.find(:Bob)
我会找回正确的记录。
这也意味着rake生成的控制器和路由不起作用,转到localhost:3030/users/bob
让我
ActiveRecord::RecordNotFound in UsersController#show Couldn't find User with 'name'=bob
我无法更改数据库,因此无法添加密钥或更改现有主键。
我是否缺少明显的模型组件或数据库设置?
答案 0 :(得分:1)
要建立@ papirtiger的评论,我建议你消除:
self.table_name = 'user' # this is the default table name already
self.primary_key = 'name' # stick with PK ID generated in migration
然后,在您的控制台中,您可以使用以下命令:
>> find_by(name: 'Bob')
以及here所描述的许多其他内容。
答案 1 :(得分:0)
不确定我是否愿意承认这种级别的麻木,但事实证明问题是
UPPERCASE_COLUMN_NAMES
我需要做的只是
class User < ActiveRecord::Base
self.table_name = 'user'
self.primary_key = 'NAME'
end
我仍然很好奇为什么符号论据起作用,但目前我的问题已经解决了。我的意思是,我仍然有成为一个傻瓜的问题,但至少我的模型工作。