【发布时间】:2014-10-05 19:30:40
【问题描述】:
我有两个模型:
电话和结果:
class Phonecall < ActiveRecord::Base
has_many :results
end
class Result < ActiveRecord::Base
belongs_to :phonecall
end
一切都很简单,如果我执行此代码:
class CallsController < ApplicationController
def index
@phonecalls = Phonecall.order('datetime DESC').all
end
end
在视野中:
<% @phonecalls.each do |ph| %>
<%= ph.results.id %>
<% end %>
我有一个错误:
undefined method `id' for #<ActiveRecord::Associations::CollectionProxy []>
我做错了什么?我尝试获取与我的 Phonecall 对象相关的 Result 对象的属性。
【问题讨论】:
-
结果是一个关系。如果你想要 ids 列表,你可以做 ph.result_ids 或者如果你想要第一个结果的 Id,你可以使用 ph.results.first.id 否则你可以像任何其他集合/关系一样迭代它
-
你用的是rails 3还是rails 4?
-
我想用一个 id 来表示电话和结果之间的关系
-
你可以把 order 写得更漂亮:order(datetime: :desc)。而且您还需要通过使用 include 来避免 N+1 查询。最后它看起来像:@phonecalls = Phonecall.include(:results).order(datetime: :desc).to_a
标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4