0

我正在使用 rails v3.0.9

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

我在控制台中尝试过的,

@customers = Customer.all       # returns collection of records

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

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

@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...

请任何人解释查找方法与上述两个示例有何不同

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

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

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

哪种方法最好从活动记录数组中找到单个记录?

4

2 回答 2

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 查询..这是新的 rails 3 方式。所有 find 方法在 rails 4 中都已弃用,并从 rails 核心中提取到额外的 gem 中。

于 2013-08-04T00:28:26.660 回答
0

只需这样做:

@customer = Customer.find(customer_id)

例如:

@customer = Customer.find(1)
# => will return the customer with the id equal to 1
于 2013-08-03T16:34:43.240 回答