2012-01-02 2 views
1

上のRubyでのクエリは、私は私のコントローラでこれを持っています。 ..アクセスRailsの

質問1。構文は私がhttp://guides.rubyonrails.org/active_record_querying.htmlで見つけましたが、私がそれを正しく使用しているかどうかわかりませんか?

質問2ですが、私はコントローラにこれを持っています、コントローラーにクエリーを持っていればいいですか?

変数<% = @itemsok%>を印刷するビューイムで

と私が得るすべては

ActiveRecord::Relation:0x007fd3d3e894d8 

任意の提案ですか? ありがとうございます。 where()機能がActiveRecord::Relationを返し

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

+0

私もレールに新しいです、あなたはこれを試すことができます:@itemsok = Search.where(」 first_item_id =?"、3) – riship89

+0

私は多くの構文方法を試みましたが、成功しませんでした...どうすればそれを印刷できますか? –

答えて

2

のActiveRecord 3は、あなたがこのような何かを行うことができますので、あなたが一緒に関係をチェーンすることができます。一般に、これは問題ではありません。オブジェクトを使用すると、自動的にクエリが実行され、結果がオブジェクトに返され、データベースオブジェクトが取得されるためです。 ARは実際に必要になるまでクエリを実行しません。あなたはこのに表示を変更、デバッグしているので、もし、項目(アレイ)のリストを返します

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

完璧です、ありがとうございますAndrew、情報を処理する方法を知っていますか? –

+0

情報を扱うことはどういう意味ですか?@itemsokのメソッドを呼び出すだけです(配列であることを覚えておいてください)。データベーステーブルのデータを返します。たとえば、次のようにします: '@itemsok.map {| item | item.first_item}' – AndrewF

+0

ハッシュをどこに渡すのがより慣れていますか。 – tokland

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 %>で印刷することができない何かを一致するレコードの配列を返します。あなたは、要素を反復し、それぞれを印刷する必要があります:私はまた、印刷したいオブジェクトのためのto_s方法を定義することをお勧めしたい

<% @itemsok.each do |item| %> 
    <%= item.name %> 
<% end %> 

class Search 
    def to_s 
    name 
    end 
end 

その後、あなたは、単にオブジェクトを印刷することができますし、to_s方法が自動的に呼び出されます。

<% @itemsok.each do |item| %> 
    <%= item %> 
<% end %> 
+0

'item'ではなく' @ item'でなければなりません。 – AndrewF

+0

あなたは正しいです、私は答えを編集しました。 –

関連する問題