0

我对 Ruby on Rails 完全陌生,我正在尝试搜索一些关系数据库表,我正在尝试在 Customer 表中搜索给定的 ID 号,然后从结果中查看该客户的 sales_rep 是谁。有了这个

@salesrepcust = Customer.find(:all, :conditions => ["id = ?",@data])

我可以在给定 ID 号的情况下找回正确的客户,但我看不出如何在 ruby​​ on rails 中从这些结果中仅提取一列值,在这将是 sales_rep 的值,然后将其用作我的@结果为

@salesrepcustdata = Salesrep.find(:all, :conditions => ["id = ?", @result])

我已经搜索过这个,但我想我的措辞不正确,因为我无法找到任何具体的内容,有人可以帮忙吗?

4

3 回答 3

1

选择单个列非常简单;你可以尝试这样的事情:

@salesrepcustids = Customer.where(id: @data).select(:id)

这将生成一个SELECT id FROM ...语句。

现在你可以这样做了:

@salesrepcustdata = Salesrep.where(id: @salesrepcustids)

这将生成SELECT...IN带有这些 id 的语句。

(您可能会发现在模型中设置适当的 ActiveRecordhas_manybelongs_to关系或任何合适的关系更容易。)

于 2013-11-01T23:13:52.567 回答
0

假设销售代表在Customer表中表示,sales_rep_id您可以这样做:

Salesrep.find(Customer.find(@data).sales_rep_id)

find方法假定您正在寻找id,如果只有一个项目id,则无需指定:all.

这一切都在http://guides.rubyonrails.org/active_record_querying.html中讨论

于 2013-11-01T23:11:20.210 回答
0

该客户查询可以简化为:

@customer = Customer.find(@data)

您没有提到您是否在 Customer 和 Salesrep 之间建立了关系,但这里是:

# app/models/customer.rb
class Customer < ActiveRecord::Base
  belongs_to :salesrep, class_name: 'Salesrep' # => the customers table should have a salesrep_id column
end

# app/models/salesrep.rb
class Salesrep < ActiveRecord::Base
  has_many :customers
end

customer_id = 1
@customer = Customer.find(customer_id)
@salesrep = @customer.salesrep

# from the other way, assuming you need both the salesrep and customer:
salesrep_id = 10
@salesrep = Salesrep.find(salesrep_id)
# the following will only find the customer if it's owned by the Salesrep
@customer = @salesrep.customers.find(customer_id)
于 2013-11-01T23:12:51.790 回答