ActiveRecord查询关联的模型Rails 3

时间:2013-03-03 18:44:09

标签: ruby-on-rails rails-activerecord

我在rails中有三个模型,Project(date,has_many:project_savings),Usage(month,amount,has_many:project_savings)和MonthlyProjectSaving(amount,belongs_to:usages,:projects)。

它的设置使每个项目都有一些节省,这些节省相当于一些用法月。我正在尝试以最安全的方式找到具有相应project.date> = usage.month以及usage.amount == 0的所有项目节省。 usage.monthproject.date都是日期类型。

以下基本上是我想要的,但我尝试了很多方法,但无法正确理解语法。

在我的项目展示视图中:

s = @project.monthly_project_savings
s.where(s.usage.month >= @project.date).where(s.amount: 0)

我更喜欢一种不会让SQL注入开放的解决方案。干杯!

1 个答案:

答案 0 :(得分:1)

我认为你可能正在寻找类似的东西,但我不确定monthly_project_savings是什么,或者用户#月和Project#date是什么类型。

s.joins(:usages).where('usages.month >= ?', @project.date).where(amount: 0)

在字符串中使用带有占位符的.where完全没问题,因为参数会自动引用。它是直接的SQL修改或插入不可信参数,你应该避免。更多信息:http://guides.rubyonrails.org/security.html#sql-injection

简而言之:在视图中进行查询并不是非常MVC;最好是在控制器中进行,或者更好的是在模型中进行。