ruby-on-rails - 通过rails关联查询

标签 ruby-on-rails associations

我在关联模型时遇到问题,或者我不知道如何通过关联进行查询。

class Entry < ActiveRecord::Base
  has_one :category
end

class Category < ActiveRecord::Base
  belongs_to :entry
end

现在,如果我进入 Rails 控制台并请求 Entry.first,我会得到:

Entry Load (0.1ms)  SELECT "entries".* FROM "entries" LIMIT 1
=> #<Entry id: 1, category_id: 1, duration: 2.0, image: "3", note: "4", url: "5", created_at: "2012-03-03 02:22:23", updated_at: "2012-03-03 02:22:23">

如果我询问Category.first我得到:

Category Load (0.1ms)  SELECT "categories".* FROM "categories" LIMIT 1 
=> #<Category id: 1, name: "Dev", created_at: "2012-03-03 02:17:17", updated_at: "2012-03-03 02:17:17">

但是如果我要求 Entry.first.category.name,它就会崩溃,我得到:

Entry Load (0.1ms)  SELECT "entries".* FROM "entries" LIMIT 1
NoMethodError: undefined method `category' for #<Entry:0x007fec4d217848>
from /Users/john/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/activemodel-3.2.1/lib/active_model/attribute_methods.rb:407:in `method_missing'
from /Users/john/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/activerecord-3.2.1/lib/active_record/attribute_methods.rb:126:in `method_missing'
from (irb):63
from /Users/john/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/railties-3.2.1/lib/rails/commands/console.rb:47:in `start'
from /Users/john/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/railties-3.2.1/lib/rails/commands/console.rb:8:in `start'
from /Users/john/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/railties-3.2.1/lib/rails/commands.rb:41:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'

这是为什么呢?如何通过条目获取类别名称?我做错了什么?

最佳答案

在您的情况下,类别表应具有 entry_id 列,但您在第一个条目中具有 category_id

所以尝试改变:

class Entry < ActiveRecord::Base
  belongs_to :category
end

class Category < ActiveRecord::Base
  has_one :entry
end

或者更改您的数据库架构。

关于ruby-on-rails - 通过rails关联查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9544044/

相关文章:

ruby-on-rails - before_destroy 和依赖销毁不触发

ruby-on-rails - 数组对象中的 Mongo 查询

ruby-on-rails - 如何循环遍历属性和数组以在表单中创建表

ruby-on-rails - 如何将 RedCloth.to_html 转换回可编辑的普通文本?

ruby-on-rails - 使用 Carrierwave 和 rmagick 上传图像并调整图像大小时堆栈级别太深

ruby-on-rails - 我如何在 FactoryGirl 中为循环关联创建工厂?

ruby-on-rails - 使用 HABTM 和 has_many :through - Need Help Identifying Where I've Gone Wrong

cakephp - 自 "HABTM"或 "HasMany Through"概念混淆

cakephp - 使用Model-> find()(CakePHP)关联模型中的条件

ruby-on-rails - ActiveRecord - 嵌套包含