我的控制器中有这个:
@itemsok = Search.where("first_item_id = ?", params["3"])
这可以成为数据库搜索表中的一个查询,要求所有搜索的first_item_id = 3 ...
问题1 .-语法是我在http://guides.rubyonrails.org/active_record_querying.html中找到的,但我不确定我是否正确使用它?
好的问题2是,我在控制器上有这个,是否可以在控制器中查询?
在视图中打印变量<%= @itemsok%>我得到的只是一个
ActiveRecord::Relation:0x007fd3d3e894d8
有什么建议吗? 提前谢谢。
答案 0 :(得分:2)
ActiveRecord 3允许您将关系链接在一起,因此您可以执行以下操作:
@itemsok = Search.where("first_item_id = ?", params["3"]).where("foo = ?", "bar")
where()
函数返回ActiveRecord::Relation
。通常这不是问题,因为如果您使用该对象,它将自动运行查询并在对象上返回结果,这样您就可以获得数据库对象。在实际需要之前,AR不会运行查询。
哪里会返回一个项目列表(数组),所以如果您只是调试,请将您的视图更改为:
<%= debug @itemsok.to_a %>
答案 1 :(得分:1)
您似乎错误地构建了查询。
如果你想搜索first_item_id = 3的记录,你应该这样做:
Search.where("first_item_id = ?", 3)
这将返回一系列匹配记录,您无法使用<%= @itemsok %>
轻松打印这些记录。您应该迭代元素并打印每个元素:
<% @itemsok.each do |item| %>
<%= item.name %>
<% end %>
我还建议为要打印的对象定义to_s
方法。
class Search
def to_s
name
end
end
然后您可以简单地打印对象,并自动为您调用to_s
方法:
<% @itemsok.each do |item| %>
<%= item %>
<% end %>
答案 2 :(得分:0)
正确的方法是在模型中定义namedscope
,然后在控制器中使用它。
类似的东西:
class Search < ActiveRecord::Base
named_scope:item_ok,lambda {|*args|{:conditions=>["item_id >= ?", args.first]}}
end
然后从控制器调用namedscope
,如下所示:
@itemsok = Search.item_ok(params[:value])