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]
Другие вопросы по тегам