2011-07-06 9 views
0

協会を通じて私がアクセスできるのparamsを使用してコレクションを絞り込むするコレクション

class PostsController < ApplicationController 
load_and_authorize_resource 
    def index 
    if params[:event_id] then 
     @event = Event.find(params[:event_id]) 
     if params[:category_id] then 
     @category = Category.find(params[:category_id]) 
     @posts = Post.where(:event_id => @event.id, 
        :product => {:category_id => @category.id }) 
     end 
    end 
    end 

を連想のparamsを使用すると、私はエラー

No attribute named 'category_id' exists for table 'product' 

を与えるが、列「CATEGORY_ID」 'はテーブルに存在しません製品'。このエラーを検索してもまだ役に立たないものは表示されていません。私はまた、属性をアクセス可能にするために 'デリゲート'を使用しようとしましたが、それもうまくいきませんでした。私は困惑している。

私は修正 ':製品' にここ

はスキーマ

create_table "posts", :force => true do |t| 
    t.float "quantity" 
    t.datetime "deadline" 
    t.integer "product_id" 
    t.integer "event_id" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    end 

    create_table "products", :force => true do |t| 
    t.string "title" 
    t.text  "desc" 
    t.text  "ingredients" 
    t.float "deposit" 
    t.float "cost" 
    t.string "units" 
    t.float "quantity" 
    t.float "deadline_hours" 
    t.boolean "presell_option" 
    t.integer "user_id" 
    t.integer "category_id" 
    t.integer "club_id" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    end 

編集です ':製品の私は、これはさらに私を困惑

SQLite3::SQLException: no such column: products.category_id: SELECT "posts".* FROM "posts" WHERE (("products"."category_id" = 2 AND "posts"."event_id" = 10)) 

この関連のエラーを取得スキーマは商品表にcategory_idを持っていると言います

答えて

3

productではなく、属性名productsを使用する必要があります。これはルールに対する1つのRailsの例外です。

@posts = Post.joins(:product).where(:event_id => @event.id, 
        :products => {:category_id => @category.id }) 
+0

私はこれを変更しようとしました、私の編集、エラーのアイデアを参照してください?私に含める必要があるものは他にありますか? – thejonster

+0

私の答えは一見して更新されました。 –

+0

はい、うまくいきます、ありがとうございます。私は、ジョインが何をし、どこでそれを使う必要があるのか​​を学ばなければならないだろうと思う。 – thejonster

2

試してみてください

@posts = Post.where(:event_id => @event.id, 
       :products => {:category_id => @category.id }) 
+0

ありがとう、関連するエラーがあります。私の編集 – thejonster

+0

@thejonsterを参照してください。データベースは完全に移行されていますか?ただ確認する。 – Dogbert

+0

これらのテーブルはプロジェクトの早い段階で移行されました(そして私はダブルチェックもしました)。私はすべての変更を移行するようにしています。 – thejonster

1

MetaSearch gemを使用すると、コードを減らして簡単に使用できます。それは非常に素晴らしいツールです!ビデオチュートリアル:here。ドキュメント:here

+0

ありがとう、私は検索機能のためにこれを実装します。ここでparamsを使用する理由は、URLを使用して特定のカテゴリの投稿を表示するためです。 metasearchはネストされたルートの良い代替品ですか? – thejonster

+0

わかりません。しかし、あなたのケースでは、MetaSearchは最良の解決策ではないと思います。 –

関連する問題