Ruby on rails 在模型中声明两个if语句

Ruby on rails 在模型中声明两个if语句,ruby-on-rails,model,Ruby On Rails,Model,目前,我遇到了一个问题,那就是如何着手编写游戏模型的一部分 我目前在模型的def索引部分中有以下内容: def index games_relation = case params[:console].present? when true then Game.where(:console => params[:console]) else Game end @games = games_relation.search(params[:search]) end

目前,我遇到了一个问题,那就是如何着手编写游戏模型的一部分

我目前在模型的def索引部分中有以下内容:

def index
  games_relation = case params[:console].present?
    when true then Game.where(:console => params[:console])
    else Game
  end
  @games = games_relation.search(params[:search])
end
现在,这很好,但我想添加另一个部分,查看用户名,因此它包括以下内容:

user_relation = case params[:username].present?
  when true then User.where("username LIKE ?", "#{params[:username]}%")
  else User
end
现在我想我在索引中加入了两个循环,但是我该怎么做@games行呢

我尝试过以下方法,但没有成功:

def index
  games_relation = case params[:console].present?
    when true then Game.where(:console => params[:console])
    else Game
  end

  name_relation = case params[:game_name].present?
    when true then Game.where("game_name LIKE ?", "#{params[:game_name]}%")
    else Game
  end

  @games = name_relation.games_relation.search(params[:search])
end

我目前正在调用games\u关系,但我如何才能调用games\u关系和user\u关系?

就像KL-7建议的那样,使用if/else。case的目的是当您有多个if时。你有一两个


如果您需要进行complexer搜索,我建议您使用。您只需传入搜索参数(正确命名的键/值),它就会照顾到您

如果您使用case语句处理真或假条件,这会使代码难以阅读,您可以执行以下操作:

games_relation = params[:console].present? ? Game.where(:console => params[:console]) : Game

这就是条件。但我从你的代码中猜测,你的模型是这样的:

games_relation = params[:console].present? ? Game.where(:console => params[:console]) : Game
用户:

游戏:

所以你可以这样做:

def index
  @games = User.games

  @games = @games.where(:console => params[:console]) if params[:console].present?

  @games = @games.where("game_name LIKE ?", "#{params[:game_name]}%") if params[:game_name].present?

  @games
end
选项1)这是最少编码的方法:

@games = Game
@games = @games.where("game_name LIKE ?", "#{params[:game_name]}%") if params[:game_name].present?
@games = @games.where("console = ?", params[:console]) if params[:console].present?
但是,这将导致3个查询

选项2)1查询,更多代码:

@games = if params[:game_name].present? && params[:console].present?
  Game.where("console = ? AND game_name LIKE ?", params[:console], "#{params[:game_name]}%")
elsif params[:game_name].present? && !params[:console].present?
  Game.where("game_name LIKE ?", "#{params[:game_name]}%")
elsif !params[:game_name].present? && params[:console].present?
  Game.where("console = ?", params[:console])
else
  Game
end

很抱歉,我不理解您的问题,但有一件事我可以肯定地告诉您:如果您只有两个选项,就不应该使用case语句。如果。。。else相反。嘿,我刚刚更新了我的问题,以了解我尝试过什么以及我正在尝试做什么。如果你能描述一下游戏和用户之间的关系,那么我会在2秒钟内为你起草这个。嘿,对不起,这是个错误,复制了错误的代码,我现在更新了上述内容。是的,这回答了我的问题。这也回答了我的问题。谢谢你的帮助:)
@games = Game
@games = @games.where("game_name LIKE ?", "#{params[:game_name]}%") if params[:game_name].present?
@games = @games.where("console = ?", params[:console]) if params[:console].present?
@games = if params[:game_name].present? && params[:console].present?
  Game.where("console = ? AND game_name LIKE ?", params[:console], "#{params[:game_name]}%")
elsif params[:game_name].present? && !params[:console].present?
  Game.where("game_name LIKE ?", "#{params[:game_name]}%")
elsif !params[:game_name].present? && params[:console].present?
  Game.where("console = ?", params[:console])
else
  Game
end