2011-07-06 83 views
0

我想用訪問PARAMS通過協會使用關聯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 

縮小收集給我的錯誤

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

必須使用屬性名稱products而不是product。這是規則的一個例外。

@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查看某些類別的帖子。元搜索是嵌套路線的一個很好的替代品嗎? – thejonster

+0

我不確定。但我認爲,就您的情況而言,MetaSearch並非最佳解決方案。 –