0

我正在尝试在 RoR 中进行查询,但我的条件来自参数并动态变化。

我试过这个:

@userlist = User.find(:all, conditions:{(name:params[:name] if params[:name] != nil), (lastname:params[:lastname] if params[:lastname] != nil)})

这只是我的想象,但说明了我的意思。

谢谢

4

2 回答 2

1

如果您使用的是 Rails 3:

@userlist = User.scoped
@userlist = @userlist.where(name: params[:name]) if params[:name].present?
@userlist = @userlist.where(lastname: params[:lastname]) if params[:lastname].present?

ETC..

于 2012-05-18T11:24:16.797 回答
0

您可以执行以下操作:

BlahController < ActiveController::Base
  before_filter :find_params, :only => :index

  def index
    @user_list = User.where(@filtered_params).all
  end

  def find_params
    @filtered_params = params[:name].present? ? "'name = ?', #{params[:name]}" : "'last_name = ?', #{params[:last_name]}"
  end

end

所以我假设你只有两个条件, aparams[:name]或 a params[:last_name]。如果还有更多,只需将三进制更改为if elsif语句即可。

于 2012-05-18T11:24:41.097 回答