Rails - 带有ActiveRecord的条件查询?

时间:2011-01-08 04:25:12

标签: ruby-on-rails activerecord ruby-on-rails-3

给出如下查询:

current_user.conversations.where("params[:projectid] = ?", projectid).limit(10).find(:all)

params [:projectid]正在从jQuery ajax发送。有时这是一个整数,上面的工作正常。但是如果使用选择“所有项目,那就是''哪个rails变为0的值,这会产生无效的查询

如何使用rails你说搜索参数[:projectid] =?如果定义了?

由于

2 个答案:

答案 0 :(得分:5)

我想您可能错误地输入了一些查询。在任何情况下,"params[:projectid] = ?"都不应该是有效的查询条件。

无论如何,你可以做某种条件陈述:

if params[:project_id].blank?
  @conversations = current_user.conversations.limit(10)
else
  @conversations = current_user.conversations.where("project_id = ?", params[:project_id]).limit(10)
end

虽然,我可能更喜欢这样的事情:

@conversations = current_user.conversations.limit(10)
@converstaions.where("project_id = ?", params[:project_id]) unless params[:project_id].blank?

图片的标题说明:

  1. 您不必使用.find(:all)。 Rails将在需要结果集时自动执行查询(例如当您执行@conversations.each时)。
  2. 尽可能尝试遵循Rails的蛇形命名方案(例如project_id而不是projectid)。从长远来看,你会为自己和合作者节省很多麻烦。
  3. 谢谢,但如果where查询允许说3个params,project_id,project_status,...例如,那么除非想法不起作用。我很震惊Rails没有更好的方法来处理条件查询参数

    编辑:如果您有多个可能是查询一部分的参数,请考虑where将哈希作为其参数的事实。有了它,您可以轻松地动态构建参数哈希,并将其传递给where。这样的事情,也许是:

    conditions = [:project_id, :project_status, :something_else].inject({}) do |hsh, field|
      hsh[field] = params[field] unless params[field].blank?
      hsh
    end
    
    @conversations = current_user.conversations.where(conditions).limit(10)
    

    在上面的例子中,你将遍历数组中的所有字段,并将它们中的每一个添加到生成的哈希中,除非它是空白的。然后,你将哈希传递给where函数,一切都很好,花花公子。

答案 1 :(得分:-1)

我不明白你为什么这么说:

where("params[:projectid] = ?", projectid)

如果从ajax请求收到params [:project],则查询字符串不应为:

where("projectid = ?", params[:projectid])

这一翻译?

如果你收到一个空字符串('')作为参数,你可以随时测试:

unless params[:projectid].blank?

我不认为我不喜欢你的问题,但我希望这会有所帮助。