尝试在Rails控制器中做一些相当简单的事情。现在,我向用户显示与记分板表中的user_id
匹配的所有结果。
我现在想调整它以显示来自user_id
的结果,但也只显示大于整数0的scores
。所以我将控制器更改为:
def index
@scoreboards = Scoreboard.where(user_id: current_user.id, "score >= 0").order(score: :desc)
end
这会收到语法错误,因此我在.where
中的比较可能是错误的。我应该如何添加第二个条件?
答案 0 :(得分:1)
我会试试这个:
@scoreboards = Scoreboard.where(user_id: current_user.id)
.where("category >= 0").order(score: :desc)
答案 1 :(得分:1)
我尽量避免将这些类型的数据库操作直接放在控制器中,因为模型是更合适的地方。我在模型中写了三个范围:
class Scoreboard < ActiveRecord::Base
#...
scope :for_user_id, ->(user_id) { where(user_id: user_id) }
scope :with_scores, -> { where('score > 0') }
scope :by_descending_score, -> { order(score: :desc) }
#...
end
...然后在控制器中,你只需写下这个:
Scoreboard.for_user_id(current_user.id).with_scores.by_descending_score
这可以使您的控制器更薄(并且更具可读性),同时可能支持以最原子的方式重复使用这些查找并保持数据库逻辑完全包含在模型中。