Как поменять маршруты в ruby ​​на рельсах? - PullRequest
8 голосов
/ 06 октября 2011

Я только что установил Ruby on Rails и создал скаффолд с именем posts.RoR сгенерировал контроллеры и другие необходимые для меня файлы.

Я создал новый метод в posts_controller, но не могу получить к нему доступ.Я посмотрел на другие методы, которые есть в контроллере, и похоже, что мне нужно получить к ним доступ /posts/[MY POST ID]/[MY METHOD NAME].

. Если я создал свой собственный метод hello в контроллере, как мне получить к нему доступ?

Я посмотрел на routes.rb, но для него нет конфигурации.

Обновлено:

Я понимаю, что могу настроить его вручную в routes.rb, но как работают все остальные методы?Например, у меня есть методы "edit" и "update" в контроллере "posts_controller.rb".Как эти два метода работают без настройки маршрутов?

  # GET /posts/1/edit
  def edit
    @post = Post.find(params[:id])
  end

Я не могу найти конфигурацию, которая соответствует шаблону /posts/[0-9]/edit.

Ответы [ 5 ]

9 голосов
/ 06 октября 2011

Документация, которую вы ищете: Маршрутизация с внешней стороны .Прочитав это, вы поймете, что Rails делает, чтобы принять ваш запрос и указать его на метод в вашем контроллере.

6 голосов
/ 06 октября 2011

Вам необходимо добавить для него маршрут к routes.rb. Например:

# Previous routes
# resources :posts

# Updated routes
resources :posts do
  get "hello", :on => :member
end

Взгляните на это Руководство по Rails о маршрутизации , оно должно помочь вам понять маршрутизацию Rails.

4 голосов
/ 06 октября 2011

Это даст вам хороший старт на маршрутах: http://guides.rubyonrails.org/routing.html

Не у каждого метода, который вы создаете, будет свой путь, рельсы построены по принципу отдыха, и ваши скаффолды создали методы впостконтроллер, который следует этим путям, например, index, show и т. д. *

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

3 голосов
/ 06 октября 2011

In Rails 3.x

match 'posts/hello' => 'posts#hello'

Доступно на example.com/posts/hello

.
1 голос
/ 06 октября 2011

Когда вы использовали scaffold для создания поста, он добавил строку resources :posts в ваш файл routes.rb.Эта строка настраивает маршруты для всех сгенерированных действий контроллера.Как упоминал Калеб выше, не у каждого действия есть свой путь.Один путь может соответствовать нескольким действиям, потому что рельсы также учитывают метод HTTP.Так, например, путь /posts с методом HTTP GET соответствует действию контроллера index, а тот же путь с методом HTTP PUT соответствует действию контроллера update.Вы можете увидеть эти ассоциации, когда вы запускаете rake routes из консоли.Я согласен с Джорданом и Калебом в том, что Руководство по Rails хорошо прочитано и поможет вам понять маршруты.

...