迭代数据库取决于属性

时间:2017-05-20 01:46:40

标签: ruby-on-rails database loops

我需要遍历一个数据库表,它的条件会发生变化:

<%# if @story.category == 5 %>

<% @users.where(generalLabour: 1).find_each do |user| %>

<% else %>

<% @users.each do |user| %>

.... Iterate and display data.....

所以我需要做这样的事情,遗憾的是这似乎不起作用,因为我不能在其他语句旁边运行这样的语句

我还需要进行整数比较:

<% @users.where(starttime: > 12 ).find_each do |user| %>

我是怎么做这样的事情的?

也许我应该用Javascript而不是rails来做这一切?

3 个答案:

答案 0 :(得分:2)

试试这个

query= ""
if @story.category == 5
   query = "generalLabour = 1"
elsif @story.category == 4
   query = "generalLabour = 2"
elsif @story.category == 6
   query = "generalLabour = 3"
end

@users.where(query).each do |user|
   .........
end

答案 1 :(得分:1)

query= ""
if @story.category == 5
  query = "SaturdayS <= #{story.startTime}"
elsif @story.category == 4
  query = "SaturdayE >= #{story.endTime}"
end

@users.where(query).each do |user|
 .........
end

答案 2 :(得分:0)

您可以使用带映射的哈希:

x = { 5 => 1, 4 => 2, 6 => 3 }[@story.category]

或者使用case statement(这是switch的红宝石版本):

x = case(@story.category)
when 5
  3
when 4
  2 
when 6
  3
else
  raise "Doh! I did not think of this."
end

但你很可能只是做错了。应用程序中的硬编码ID不是一个好的解决方案,您应该通过设置正确的关联并通过它获取相关项来解决此问题。