Rails 3 - URL-помощники с ограниченным ресурсом - PullRequest
0 голосов
/ 22 сентября 2011

В моем файле маршрутов есть ресурс с областью действия:

scope :module => "physical" do
    resources :mymodels
end

Используя '> rake маршруты', я получаю стандартные маршруты, в том числе:

mymodel GET    /mymodels/:id(.:format)    {:action=>"show", :controller=>"physical/mymodels"}

Однако, когда я используюконсоль (и это то, что не получается в моих тестах), чтобы получить URL для экземпляров Mymodel, я получаю ошибки:

> m = Physical::Mymodel.new
> => {...model_attributes...}
> m.save
> => true
> app.url_for(m)
> NoMethodError: undefined method `physical_mymodel_url' for #<ActionDispatch::Integration::Session:0x00000105b15228>
from /usr/local/lib/ruby/gems/1.9.1/gems/actionpack-3.0.7/lib/action_dispatch/testing/assertions/routing.rb:175:in `method_missing'
from /usr/local/lib/ruby/gems/1.9.1/gems/actionpack-3.0.7/lib/action_dispatch/routing/polymorphic_routes.rb:114:in `polymorphic_url'
from /usr/local/lib/ruby/gems/1.9.1/gems/actionpack-3.0.7/lib/action_dispatch/routing/url_for.rb:133:in `url_for'
from (irb):13
from /usr/local/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/commands/console.rb:44:in `start'
from /usr/local/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/commands/console.rb:8:in `start'
from /usr/local/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/commands.rb:23:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'

Это может быть недочёт, но Mymodel также является подклассом, использующим стандартную единственную таблицу Railsнаследство.

Есть мысли?Почему он ищет phys_mymodel_url вместо mymodel_url?Какие-нибудь идеи для обходных путей, чтобы я мог все еще использовать нефиксированные маршруты?

1 Ответ

2 голосов
/ 22 сентября 2011

Вы используете область только для того, чтобы сообщить модулю, в котором находится контроллер. Если вы хотите использовать префикс physical на своих маршрутах, вы можете сделать это:

scope :module => "physical", :as => "physical" do
  resources :mymodel
end

В качестве альтернативы, вы можете просто использовать метод namespace, который будет делать то же самое:

namespace :physical do
  resources :mymodel
end
...