[英]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.