Вложенные маршруты Rails не фильтруются

У меня есть две модели: Product и ProductType:

Продукт:

class Product < ActiveRecord::Base
    default_scope :order => 'name'

    has_many :sales

    belongs_to :product_type, :class_name => "ProductType", :foreign_key => "type_id"   
end

Тип продукта:

class ProductType < ActiveRecord::Base
    default_scope :order => 'name'

    has_many :products
end

В моих маршрутах.rb у меня есть:

resources :product_types do
    resources :products
end

Когда я запускаю рейк-маршруты, я вижу, что этот URL-адрес существует:

        product_type_product GET    /product_types/:product_type_id/products/:id(.:format)               {:controller=>"products", :action=>"show"}

У меня проблема в том, что когда я перехожу к: http://localhost:3000/postering_locations/48/users, он покажет мне единственного пользователя, у которого есть место публикации с идентификатором 48. Проблема в том, что он также отображает всех других пользователей. То же самое происходит, когда я меняю 48 на другой номер это действительно. Я чувствую, что это частично работает, потому что, когда я меняю его на номер, которого нет в таблице, я получаю сообщение об ошибке маршрутизации. Любые мысли о том, как заставить /postering_locations/48/users действительно показывать мне пользователей с 48 в качестве их идентификатора postering_location?

Кроме того, в файле route.rb, если я все еще хочу, чтобы люди могли видеть только /products/, где мне добавить ресурсы :products в файл route.rb?


person jyanks    schedule 03.08.2011    source источник


Ответы (1)


Я думаю, вы должны просто отредактировать действие вашего контроллера:

@products = ProductType.find(params[:product_type_id]).products

Что касается вашего второго вопроса, просто добавьте простое:

resources :products

К вашим маршрутам.рб. В маршрутизации действует правило первого совпадения. Но поскольку вложенный и невложенный URL-адреса не будут совпадать друг с другом, все в порядке.

person apneadiving    schedule 03.08.2011
comment
Эй, извините... Я добавил не ту строку из рейк-маршрутов. Следует ли ссылаться на этот :product_type_id как есть или он должен быть указан в params[:product_type_id]? - person jyanks; 04.08.2011
comment
Что произойдет, если я захочу добавить другие вложенные ресурсы? Скажем, для каждого пользователя у меня есть и роль, и местоположение, к которому принадлежит пользователь. Роли и местоположения имеют много пользователей. Таким же образом я добавил вложенные маршруты. Когда я добавляю: @users = Location.find(params[:location_id]).users в свой user_controller, он отлично работает, когда я пытаюсь искать пользователей по местоположению. Как мне добавить код в контроллер, чтобы я также мог искать пользователей по ролям? - person jyanks; 05.08.2011
comment
Правило состоит в том, чтобы публиковать только вопрос за раз. Более того, наличие совершенно нового вопроса проясняет новую проблему, чего сейчас нет. - person apneadiving; 05.08.2011