Пользовательская маршрутизация RoR / Метод / Просмотр проблемы все методы возвращаются как неопределенные - PullRequest
1 голос
/ 06 января 2011

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

Мой контроллер

    class fatherController < ApplicationController
      def show
        @father = Father.find(params[:id])

        respond_to do |format|
         format.html # show.html.erb
         format.xml  { render :xml => @father }
        end
      end

      def ofmine
        @father = Father.find(params[:id])

        respond_to do |format|
          format.html # show.html.erb
          format.xml  { render :xml => @father }
        end
      end
   end

Мои маршруты.рб

Parent::Application.routes.draw do
  resources :fathers do
     resources :kids
  end 

  match 'hospitals/:id/ofmine' => 'father#show2'
end

когда я иду на

127.0.0.1: / отец / 1

работает нормально, но когда я пытаюсь перейти на

127.0.0.1: / отец / 1 / ofmine

выдает следующую ошибку. Неважно, какая переменная / метод вызывается; это происходит в первом отображаемом. И show.html.erb, и show2.html.erb - это одни и те же файлы

Моя ошибка из командной строки веб-сервера

> Processing by fathersController#show2
> as HTML   Parameters: {"id"=>"1"}
> Rendered fathers/show2.html.erb within
> layouts/application (31.6ms) Completed
> in 37ms
> 
> ActionView::Template::Error (undefined
> method `name' for nil:NilClass):
>     4:         <td>Name</td><td></td>
>     5:     </tr>
>     6:     <tr>
>     7:  <td><%= @father.name %></td><td></td>
>     8:     </tr>
>     9:     <tr>
>     10:  <td>City</td><td>State</td>   app/views/fathers/show2.html.erb:7:in
> `_app_views_fatherss_show__html_erb___709193087__616989688_0'

Ошибка, отображаемая на реальной странице

NoMethodError in Fathers # show2

Показываются /var/ruby/chs/app/views/fathers/show2.html.erb где строка № 7 поднята:

неопределенный метод `name 'для ноль: NilClass

Извлеченный источник (около строки № 7):

4: Имя 5:
6: 7: <% = @ Father.name%> 8:
9: 10: CityState

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

Вот копия моих рейковых маршрутов

     father_ofmine      /fathers/:father_id/ofmine(.:format)               {:action=>"show2", :controller=>"fathers"}
     father_kids GET    /fathers/:father_id/kids(.:format)          {:action=>"index", :controller=>"kids"}
                 POST   /fathers/:father_id/kids(.:format)          {:action=>"create", :controller=>"kids"}
  new_father_kid GET    /fathers/:father_id/kids/new(.:format)      {:action=>"new", :controller=>"kids"}
 edit_father_kid GET    /fathers/:father_id/kids/:id/edit(.:format) {:action=>"edit", :controller=>"kids"}
      father_kid GET    /fathers/:father_id/kids/:id(.:format)      {:action=>"show", :controller=>"kids"}
                 PUT    /fathers/:father_id/kids/:id(.:format)      {:action=>"update", :controller=>"kids"}
                 DELETE /fathers/:father_id/kids/:id(.:format)      {:action=>"destroy", :controller=>"kids"}
         fathers GET    /fathers(.:format)                                     {:action=>"index", :controller=>"fathers"}
                 POST   /fathers(.:format)                                     {:action=>"create", :controller=>"fathers"}
      new_father GET    /fathers/new(.:format)                                 {:action=>"new", :controller=>"fathers"}
     edit_father GET    /fathers/:id/edit(.:format)                            {:action=>"edit", :controller=>"fathers"}
          father GET    /fathers/:id(.:format)                                 {:action=>"show", :controller=>"fathers"}
                 PUT    /fathers/:id(.:format)                                 {:action=>"update", :controller=>"fathers"}
                 DELETE /fathers/:id(.:format)                                 {:action=>"destroy", :controller=>"fathers"}

Ответы [ 2 ]

2 голосов
/ 06 января 2011

Маршруты учитываются в соответствии с порядком их появления в файле маршрутов.

Я предполагаю, что 127.0.0.1:/father/1/ofmine интерпретируется как часть resources :fathers

Поместить match 'hospitals/:id/ofmine' => 'father#show2' вверх вашего маршрута. rb, чтобы попробовать

РЕДАКТИРОВАТЬ 1:

Полагаю, вы допустили ошибку:

# instead of match 'hospitals/:id/ofmine' => 'father#show2' 
match 'father/:id/ofmine' => 'father#show2'

А чтобы получить более чистый файл, я быdo:

Parent::Application.routes.draw do
  resources :fathers do
    match '/ofmine' => 'father#show2'
    resources :kids
  end 
end

EDIT 2:

У вас есть метод show2 в вашем контроллере, который получает переменную?

Я думаю, вы предполагаете, чтоМетод current ofmine обрабатывает ситуацию, которая является неправильной

0 голосов
/ 06 января 2011

Ошибка появляется при попытке доступа к имени @father. Проблема в том, что @father равно нулю.

Еще одна вещь, которую я заметил, это то, что ваши URL должны быть во множественном числе, например /fathers/1 Запустите rake routes из командной строки, чтобы увидеть, как выглядят ваши маршруты.

...