0

我在 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.month并且project.date都是日期类型。

下面基本上是我想要得到的,但我尝试了很多方法,但无法正确使用语法。

在我的项目显示视图中:

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

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

4

1 回答 1

1

我想你可能正在寻找这样的东西,但我不确定是什么monthly_project_savings,或者 Usage#month 和 Project#date 是什么类型。

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

在字符串中使用.where占位符非常好,因为参数会自动适当地引用。您应该避免使用不受信任的参数进行直接 SQL 修改或插值。更多信息: http: //guides.rubyonrails.org/security.html#sql-injection

顺便说一句:在视图中进行查询不是非常 MVC;最好在控制器中进行,甚至更好的是在模型中进行。

于 2013-03-03T21:19:41.240 回答