Помощь с рельсами маршрутов - PullRequest
1 голос
/ 02 ноября 2009

Я серьезно не могу понять, почему это так сложно ... У меня есть некоторый опыт работы с другими фреймворками mvc, но я всегда слышал, что rails проще всего кодировать .... сейчас я не могу даже добраться до методов контроллера, если хочу к.

Я использовал scaffold для создания 'student', который автоматически создал для меня контроллер, модель и представления для базового CRUD ... но теперь я просто хочу добавить метод "helloworld" в мой контроллер, и когда я перехожу к

http://localhost:3000/students/helloworld

Я получаю

Не удалось найти студента с идентификатором = helloworld

ошибка.

что мне не хватает? .. Я знаю, что это связано с маршрутами и REST, но я все еще не могу понять, как еще я должен использовать свои собственные методы ... я должен редактировать свои маршруты. RB файл каждый раз, когда я создаю новый метод? .. пожалуйста, помогите

Ответы [ 2 ]

4 голосов
/ 03 ноября 2009

Маршруты для моделей в Rails делятся на 2 группы. Единицы, которые воздействуют на отдельные объекты (например, редактировать, обновлять, удалять), и те, у которых нет единственного объекта для действия (новый, индекс). Если вы хотите создать свой собственный метод, который не принимает идентификатор объекта, вам нужно добавить конфигурацию маршрута для этого метода в вашем файле маршрутов. Методы являются методами-членами или коллекциями. URL-адреса методов-членов выглядят как / model / id / method_name. Методы сбора выглядят так, как вы хотите (/ model / method_name). Вот пример для модели ваших студентов (rout.rb)

map.resources :students, :member => {:some_member_function_example => :get },
                           :collection => { :helloworld => :get }

Примечание. Вы можете просто удалить: member => ... из конфигурации и иметь коллекцию, только если у вас нет методов для определения членов.

0 голосов
/ 03 ноября 2009

Ссылка /students/foo не вызовет foo метод students_controller. Это потому, что отображения REST в Rails включают в себя / :controller/:id маршрут для GET. И ваша ссылка соответствует этому шаблону.

Чтобы переопределить этот путь (для методов без параметров, таких как ваш), используйте следующий фрагмент:

map.resources :students, :collection => {:method_name => :get}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...