Проблема маршрутизации RoR. Вызывает пользовательское действие, но перенаправляется, чтобы показать действие - PullRequest
1 голос
/ 09 февраля 2010

Я работаю над проектом в ruby ​​на рельсах, и у меня очень трудное время с основной проблемой. Я пытаюсь вызвать настраиваемое действие на одном из моих контроллеров, но запрос каким-то образом перенаправляется на стандартное действие show, и я не могу понять, почему.

ссылка в edit.html.erb:

<%= link_to 'Mass Text Entry', :action=>"create_or_add_food_item_from_text" %>

Ошибка из development.log:

ActiveRecord::RecordNotFound (Couldn't find Menu with ID=create_or_add_food_item_from_text): app/controllers/menus_controller.rb:20:in `show'

файл rout.rb:

ActionController::Routing::Routes.draw do |map|
map.resources :nutrition_objects
map.resources :preference_objects
map.resources :institutions
map.resources :locations
map.resources :menus
map.resources :food_items
map.resources :napkins
map.resources :users
map.resource  :session, :controller => 'session'

map.root :controller=>'pages', :action=>'index'

map.about  '/about',  :controller=>'pages', :action=>'about'
map.contact '/contact', :controller=>'pages', :action=>'contact'
map.home   '/home',    :controller=>'pages', :action=>'index'

map.user_home   '/user/home',   :controller=>'rater', :action=>'index'
map.user_napkins   '/user/napkins', :controller=>'rater', :action=>'view_napkins'
map.user_preferences  '/user/preferences',:controller=>'rater', :action=>'preferences'

map.blog   '/blog', :controller=>'pages', :action=>'blog'
map.signup  '/signup',  :controller=>'users',  :action=>'new'
map.login  '/login',  :controller=>'session', :action=>'new'
map.logout  '/logout',  :controller=>'session', :action=>'destroy'

# Install the default routes as the lowest priority. 
map.connect ':controller/:action'
map.connect ':controller/:action/:id' 
map.connect ':controller/:action/:id.:format'
end

Menus_controller.rb:

class MenusController < ApplicationController
...
   def create_or_add_food_item_from_text  
   end
...
end

create_or_add_food_item_from_text.html.erb просто имеет div для отображения формы с текстовым полем У меня остальная часть моего приложения работает нормально, но это ставит меня в тупик.

Любая помощь приветствуется.

Ответы [ 2 ]

3 голосов
/ 09 февраля 2010

Попробуйте добавить маршрут к вашему файлу явно, до ресурсов :menus:

map.connect "/menus/create_or_add_food_item_from_text",
  :controller => "menus", :action => "create_or_add_food_item_from_text"

map.resources ...

Маршруты, объявленные ранее, имеют более высокий приоритет, и проблема здесь в том, что map.resources фактически предотвращает маршрутизацию определенных путей.

Даже несмотря на эту проблему, рекомендуется отображать все пути в явном виде, либо через ресурсы, либо через именованные / безымянные маршруты, и в конечном итоге исключать из вашего приложения общие маршруты :controller/:action и :controller/:action/:id.

0 голосов
/ 09 февраля 2010

link_to ожидает путь к вашему действию в качестве второго параметра - похоже, вы передаете link_to неправильному значению пути. Проверьте журнал разработки, чтобы увидеть, какой путь пути думает, что вы ищете.

...