我正在使用 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的语法是什么?
答案 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_code
,first_name
和last_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标记了问题)