rails 3从活动记录集合中查找单个记录

时间:2013-08-03 16:33:23

标签: ruby-on-rails-3 activerecord associations

我正在使用rails v3.0.9

我无法弄清楚如何在活动记录集合中使用find方法

我在控制台中尝试了什么,

@customers = Customer.all       # returns collection of records

@customer = @customers.find {|customer| customer.id == 1 } # returns the correct record

现在我在关联集合中使用相同的find方法

@projects = @customer.projects # returns collection of Project records

@project = @projects.find {|project| project.id == 1 }  # got error
    ActiveRecord::RecordNotFound: Couldn't find Project with ID=1...

请任何人解释一下find方法与上述两个例子的区别

有没有其他方法可以在关联集合中找到记录?

我使用Array detect来获取我的项目记录

@project = @projects.detect {|project| project.id == 1 }    # returns the correct record

哪种方法最适合从活动记录数组中查找单个记录?

2 个答案:

答案 0 :(得分:0)

只需这样做:

@customer = Customer.find(customer_id)

例如:

@customer = Customer.find(1)
# => will return the customer with the id equal to 1

答案 1 :(得分:0)

您有一些机会:

# this returns the customer with the id 1 - if a customer with id 1 exists!
@customer = Customer.find(1)
@customer = Customer.where(:id => 1).first

# this returns the project with id 1 and customer_id = @customer.id
@customer.projects.find(1)
@customer.projects.where(:id => 1).first

您的错误很简单意味着您没有id = 1的项目和customer_id = @ customer.id

要回答你的问题..你应该使用where queries..that是新的rails 3方式。所有find方法都在rails 4中被弃用,并从rails core中提取出来,形成一个额外的gem。