繁体   English   中英

在Ruby on Rails中访问查询

[英]Access a query in Ruby on Rails

我在我的控制器中有这样的:

@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 

有什么建议么? 提前致谢。

ActiveRecord 3允许您将关系链接在一起,因此您可以执行以下操作:

@itemsok = Search.where("first_item_id = ?", params["3"]).where("foo = ?", "bar")

where()函数返回一个ActiveRecord::Relation 通常这不是问题,因为如果您使用该对象,它将自动运行查询并在对象上返回结果,这样您就可以获得数据库对象。 AR在实际需要之前不会运行查询。

哪里会返回一个项目列表(数组),所以如果您只是调试,请将您的视图更改为:

<%= debug @itemsok.to_a %>

您似乎正在以错误的方式构建查询。

如果要搜索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 %>

正确的方法是在模型中定义一个namedscope ,然后在控制器中使用它。

与此类似的东西:

class Search < ActiveRecord::Base
 named_scope:item_ok,lambda {|*args|{:conditions=>["item_id >= ?", args.first]}} 
end

然后从控制器调用namedscope ,如下所示:

@itemsok = Search.item_ok(params[:value])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM