Маршрут с рельсами 3.2.1 - PullRequest
       1

Маршрут с рельсами 3.2.1

1 голос
/ 22 февраля 2012

Я только что обновил приложение rails 3.0.9 до rails 3.2.1, наблюдая за обновлениями на Rails до версии 3.1.0, а затем 3.2.0. Перед обновлением мой (тогда работающий) файл rout.rb выглядел так:

match "home" => "pages#index"
match "*page" => "pages#show" 
root :to => "pages#index"

После обновления я изменил свой файл rout.rb на:

match "home" => "pages#index"
match "pages/*page" => "pages#show", :format => false 
root :to => "pages#index"

Я получил эту идею от Ruby on Rails маршрутизации в разделе Rout Globbing, чтобы имитировать рельсы версии 3.0.x.

Теперь, когда я нажимаю на ссылку, предоставленную:

<li><%= link_to "What We Do", "/what-we-do" %></li>

Я получаю эту ошибку:

Routing Error
No route matches [GET] "/what-we-do"
Try running rake routes for more information on available routes.

rake routes produces:

    home  /home(.:format) pages#index
          /pages/*page    pages#show
    root  /               pages#index
If that is helpful.

Страница, которую я пытаюсь отобразить, называется what-we-do.html.erb и находится в app / views / pages.

а это мой контроллер:

class PagesController < ApplicationController

  def index
    render :home, :layout => false
  end

  def show
    render static_page 
  rescue 
    # page_not_found
  end


  private

  def static_page
    "#{RAILS_ROOT}/app/views/pages/#{params[:page]}.html.erb"
  end

  def page_not_found
    render "#{Rails.root}/public/404.html", :layout => false 
  end

end

У кого-нибудь есть предложения?

Ответы [ 4 ]

3 голосов
/ 03 декабря 2012

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

map.resources :users, :collection => { :customers_list=> :get }

map.resources :users, :member => { :inactive=> :post }

Это рассматривается как /users/1;inactive=> [:action => 'inactive', :id => 1]

2 голосов
/ 22 февраля 2012

У вас есть маршрут, который будет соответствовать /pages/what-we-do:

/pages/*page    pages#show

но нет ничего, что соответствовало бы URL-адресу, который не начинается с /pages/ (за исключением /home, конечно). Вам все еще нужен ваш маршрут верхнего уровня:

match "*page" => "pages#show"

, если вы хотите соответствовать /what-we-do. Возможно, вы неправильно поняли это из руководства по маршрутизации :

Начиная с Rails 3.1, подстановочные маршруты всегда будут соответствовать необязательному сегменту формата по умолчанию. Например, если у вас есть этот маршрут:

match '*pages' => 'pages#show'

При запросе "/foo/bar.json" ваш params[:pages] будет равен "foo/bar" с форматом запроса JSON.

Изменение заключается в том, что вам не нужно самостоятельно обрабатывать формат, теперь он обрабатывается автоматически, как и для всех других маршрутов.

1 голос
/ 22 февраля 2012

маршруты должны быть такими -

match "home", :to => "pages#index"
root :to => "pages#index"
match ":page", :to => "pages#show" 
0 голосов
/ 03 ноября 2012

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

collection :controller do 
  get 'action name'
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...