Использование параметров ассоциации в коллекциях - PullRequest
0 голосов
/ 06 июля 2011

Я хочу сузить коллекцию, используя параметры, доступные через ассоциацию

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'

Но в таблице '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

Редактировать:

Когда я исправляю ': product' в ': products', я получаю эту связанную ошибку

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 ]

3 голосов
/ 06 июля 2011

Вы должны использовать имя атрибута products вместо product. Это одно из исключений Rails из правила.

@posts = Post.joins(:product).where(:event_id => @event.id, 
                  :products => {:category_id => @category.id })
2 голосов
/ 06 июля 2011

Попробуйте

    @posts = Post.where(:event_id => @event.id, 
              :products => {:category_id => @category.id })
1 голос
/ 07 июля 2011

Вы можете уменьшить свой код и сделать свою жизнь проще, используя драгоценный камень MetaSearch.Это очень хороший инструмент!Видеоурок: здесь .Документация: здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...