簡體   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