Rails вложенные маршруты не фильтруются - PullRequest
0 голосов
/ 04 августа 2011

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

Product:

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

    has_many :sales

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

ProductType:

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, itпокажет мне моего единственного пользователя, у которого есть место размещения постера с идентификатором 48. Проблема в том, что он также отображает всех других пользователей. То же самое происходит, когда я заменяю 48 на другое действительное число.Я чувствую, что это частично работает, потому что, когда я обмениваю его на число, которого нет в таблице, я получаю ошибку маршрутизации.Любые мысли о том, как сделать / postering_locations / 48 / users на самом деле, показывают мне пользователей с 48 в качестве идентификатора postering_location?

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

1 Ответ

1 голос
/ 04 августа 2011

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

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

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

resources :products

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

...