2011-11-11 7 views
0

内の[OK]を値を見つけたので、私は基本的に、このオブジェクトの@categories持っている:コントローラによって、ページに渡さRailsは列挙子

@categories = Category.all 

を。ですから、ここからはID 12(currentCatIdという別の変数から取り出されたレコード)のカテゴリフィールドを取得したいと思います。だから私はこれを行う:

currentCatId = 12 
currentCat = @categories.find(currentCatId) 

間違って、これは私にすべてのカテゴリを与える!私は理解できません。だから私は、私はこのような何かを試すことがわかっ見回し:

currentCat = @categories.find { |cat| cat.id = currentCatId }.category 

このことは、少なくともではなく、ID 12を持つカテゴリのではなく、最初のカテゴリについて、私が欲しいのフィールドを取得します。

私はここに夢中になりますが、インスタンス化されたオブジェクトが.findメソッド(動作していないようです)ではなく.whereメソッドを持っている理由を理解できません。

私は間違っていますが、これを行う正しい方法は何ですか?

+0

あなたは==を望んでいたが、とにかく、Oについて間違って何(1) 'currentCat = Category.find(currentCatId)':しかし、いずれにせよ、見つける簡単なO(1)と間違って何ですか? – tokland

答えて

1

meagarには、==を使用して比較する必要があります。

@current_category = Category.find(current_category_id) 
+0

これを見て、それを試しました(PHP ==だから)。しかし、私は同じ結果を得ます。私の無限の無知で、私はあなたがそのページからカテゴリーモデルを呼び出すことができないことを知っていた、私はあなたがコントローラに渡されたものだけで作業しなければならないと思ったが、これはトリックを行うようだ、どうもありがとう、私は狂って行っていた!あなたは私がRailsに初めてだと言うことができます... – kakubei

+0

これを正しく理解すれば、コントローラから@categories = Category.allのようなものを渡すのは意味がありません。単にフォームページから呼び出すかあなたは)にいる? Category.eachは存在しないので、テーブル内のすべてのエントリを見つける必要がある場合を除きます。 – kakubei

+1

いいえ、いいえ、このような検索を行う適切な場所はコントローラです。あなたのアクションに '@current_category = Category.find(current_category_id)'を入れてください。 – tokland

1

find { ... }を使用した例はほぼ正しいですが、を使用する必要がある場合は=を使用して同等性をテストしています。単一の等号は、常にとなります。

currentCat = @categories.find { |cat| cat.id == currentCatId }.category 
+0

私はそれを見て、それを試しました(PHPは==なので)、同じ結果が得られます。最初のものはid12のものではありません。 – kakubei

+0

@kakubei:あなたは==で動作しないと言っていますが、なぜ追加しますか?最後に別の ".category"があります。それはすでにカテゴリです。親カテゴリまたは誰が知っているかもしれません。 – tokland

1

Category.allはActiveRecord :: Relationではなく、配列です。

あなたは、Railsのコンソールでこれを試すことができます。

# Returns an Array 
Category.all.class 

# Returns an ActiveRecord::Relation 
Category.where(:id => 1) 

のActiveRecord ::関係は.whereあなたを与えるクラスです。 ActiveRecord :: Baseのように、配列には.findがあります。おそらくあなたは混乱しているでしょう。

+0

私はその区別を理解していますが、ActiveRecord :: RelationからそのIDを持つレコードを取得する方法を知らない – kakubei

関連する問題