Rails 4.0.x как направить корневое действие гема contact_us к указанному действию?
Я использую contact_us gem версии 0.5.4
У меня следующий код в моем файле rout.rb
resources :contacts, controller: 'contact_us', only: [:new, :create] do
root :to => 'contact_us#new'
end
в моем понимании вышеупомянутый маршрут для contacts
будет только поддерживать :new
а также :create
действия, и с указанным контроллером controller: 'contact_us'
и это с корнем /
он будет перенаправлен на #new
действие, но когда я нажимаю http://localhost:3000/contact-us в моем браузере, он говорит
Неизвестное действие
Не удалось найти действие "index" для ContactUsController
Я обновил версию rails с 3.2.19 до 4.0.13 и ruby до 2.0.0p481
старый код работал нормально с рельсами 3.2.19 и ruby 1.8.7
resources :contacts,
:controller => 'contact_us',
:only => [:new, :create]
match 'contact_us' => 'contact_us#new'
если я только изменю match
с get
в приведенном выше коде он выдает эту ошибку
/home/vagrant/.rvm/gems/ruby-2.0.0-p481/gems/actionpack-4.0.13/lib/action_dispatch/routing/route_set.rb:430:in `add_route': неверное имя маршрута, уже используется: 'contact_us' (ArgumentError)
Вы можете определить два маршрута с одним и тем же именем, используя
:as
или вы можете переопределить маршрут, уже определенный ресурсом с таким же именем. Для последнего вы можете ограничить маршруты, созданные сresources
как объяснено здесь:
3 ответа
Добавление :as
на маршруте делает работу
resources :contacts,
:controller => 'contact_us',
:only => [:new, :create]
get 'contact_us' => 'contact_us#new', as: :contact_us2
как определил Albin в чате, файл маршрута модулей contact_us уже имеет тот же маршрут, но с другим псевдонимом
get "contact-us" => "contact_us/contacts#new", as: :contact_us #line#11
Я просто добавил один и тот же маршрут с другим путем и другим псевдонимом,
Вы можете сделать это так же, как вы это делали в рельсах 3.2, вам нужно только обменять match
к get
, Больше не разрешено соответствовать любому глаголу.
resources :contacts,
:controller => 'contact_us',
:only => [:new, :create]
get 'contact_us' => 'contact_us#new'
редактировать
Мы решили это в чате. Оказывается, это было столкновение с самоцветом contanct_us.
Попробуй это
resources :contacts, controllers: 'contact_us', :only => [:new, :create]
root :to => 'contact_us#new'
# or without root
match 'contact_us' => 'contact_us#new', via: [:get]