给出如下查询:
current_user.conversations.where("params[:projectid] = ?", projectid).limit(10).find(:all)
params [:projectid]正在从jQuery ajax发送。有时这是一个整数,上面的工作正常。但是如果使用选择“所有项目,那就是''哪个rails变为0的值,这会产生无效的查询
如何使用rails你说搜索参数[:projectid] =?如果定义了?
由于
答案 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?
图片的标题说明:
.find(:all)
。 Rails将在需要结果集时自动执行查询(例如当您执行@conversations.each
时)。project_id
而不是projectid
)。从长远来看,你会为自己和合作者节省很多麻烦。谢谢,但如果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?
我不认为我不喜欢你的问题,但我希望这会有所帮助。