新手:Rails在我的案例中查询数据库的方式

时间:2011-11-04 14:09:47

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

我正在使用 Ruby v1.8 Rails v2.3

我有两个模型对象:汽车客户

模型汽车

class car < ActiveRecord::Base

  #car has attribute :town_code

  has_many :customers

end

模型客户

class customer < ActiveRecord::Base
  # customer has attribute :first_name, :last_name
  belongs_to :car
end

现在在我的控制器中,我从VIEW获得了一个字符串,收到的字符串格式为 firstname.lastname@town_code ,例如字符串“ John.smith@ac01 < / strong>“可以将其解析为first_name="John"last_name="smith"town_code="ac01"

现在,我想使用 Rails的方式查询数据库,从Customers表中找到所有客户对象(符合上述条件),该表具有:


如first_name = “约翰”下,

姓氏= “Smith” 的

并拥有一辆汽车(car_id),车辆为 town_code =“ac01”


Rails的查询语法是什么?

我知道它应该是这样的(如果我想计算匹配客户的nr):

Customer.count :consitions =>{:first_name => "John", :last_name=>"smith"...}

但是,我不确定如何引用拥有汽车参考汽车的客户 town_code= "ac01"

------------------我的问题--------------------

我想要两个查询

-one用于计算匹配客户的数量,

- 另一个查询返回客户对象,如find_by_查询。

这两个查询的Ruby on Rails的语法是什么?

3 个答案:

答案 0 :(得分:1)

它应该类似于

Customer.where(:firstname => "John", :last_name => "Smith").count

如果您有很多Car of Customer,您可以执行类似

的操作
Car.where(...).customers.where(...)

你应该真正开始rails c来测试你的查询(我可能稍微关闭)

答案 1 :(得分:1)

你可以拥有类似的东西:

@customers = car.where(:town_code => town_code).customers.where(:first_name => first_name, :last_name => last_name)

然后只计算结果:

@customer_count = @customers.count

这假设您将字符串解析为变量town_codefirst_namelast_name,就像您说的那样。

修改

我不认为Rails v2.3支持这些Active Record查询链,因为我认为它缺乏来自DB的延迟加载。我不完全确定。此外,我意识到我的第一个建议不起作用,因为可能有许多汽车具有相同的town_code。我想你可以使用map函数解决它(不测试):

@customers = car.all(:conditions => {:town_code => town_code}).map{ |c| c.customers.where(:first_name => first_name, :last_name => last_name) }

然后像以前一样计算它们:

@customer_count = @customers.count

答案 2 :(得分:0)

我相信你可以这样做:source

Customer.find(:all, :include => :car, :conditions => "customers.first_name = 'John' AND customers.last_name = 'Smith' AND cars.town_code = 'ac01'")

使用此命令可以计算所有具有规范的客户:source

Customer.count(:all, :include => :car, :conditions => "customers.first_name = 'John' AND customers.last_name = 'Smith' AND cars.town_code = 'ac01'")

顺便说一下,如果你能够选择你的工作,我会建议你去使用Rails 3.约瑟夫描述的链接方法会使这种查询变得更容易并且它会节省你在未来升级问题。 (并且你为Rails 3标记了问题)