2012-01-02 41 views
1

在Ruby中查詢我有我的控制器這樣的:訪問on Rails的

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

這sopposed是在數據庫要求所有有first_item_id = 3的搜索的搜索表的查詢。 ..

問題1。語法是我發現它在http://guides.rubyonrails.org/active_record_querying.html但我不知道如果即時通訊使用它的權利?

好的問題2是,我有這個在控制器上,可以在控制器中查詢嗎?

在視圖IM打印變量<%= @itemsok%>和我得到的是一個

ActiveRecord::Relation:0x007fd3d3e894d8 

任何建議? 在此先感謝。

+0

我也是新的軌道,你可以試試這個:@itemsok = Search.where(」 first_item_id =?「,3) – riship89 2012-01-02 08:07:33

+0

不工作夥伴:(我已經嘗試了許多語法方法,但沒有成功......你會如何打印它? – 2012-01-02 08:12:12

回答

2

的ActiveRecord 3讓你連鎖關係在一起,所以你可以做這樣的事情:

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

where()函數返回一個ActiveRecord::Relation。通常這不是問題,因爲如果使用對象,它會自動運行查詢並將結果返回到對象上,以便獲取數據庫對象。 AR直到實際需要時才運行查詢。

如果將返回項目(陣列)的列表,所以如果你只是調試,你的看法改成這樣:

<%= debug @itemsok.to_a %> 
+0

完美,非常感謝你安德魯,你知道處理信息的方法,如果我我不僅僅是在調試......只是暗示這一點,我會尋找它,非常感謝你 – 2012-01-02 08:24:48

+0

你是什麼意思,處理這些信息?你只需在@itemsok上調用方法(記住它是一個數組)將數據庫表中的數據返回,例如:'@itemsok.map {| item | item.first_item}' – AndrewF 2012-01-02 08:31:56

+0

將hash傳遞到哪裏更通俗易懂 – tokland 2012-01-02 10:27:14

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]) 
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 %> 
+0

這應該是'item'不是'@ item' – AndrewF 2012-01-02 17:01:15

+0

你是對的,我編輯了答案。 – 2012-01-03 09:15:01

相關問題