ActiveRecord :: RecordNotFound в MembersController # show - PullRequest
1 голос
/ 12 октября 2010

Я прошу прощения за мой плохой английский в первую очередь. Я только что установил ruby ​​и rails несколько часов назад (вы не поверите, что мне потребовалось 3 дня, чтобы установить ruby, rvm, rails и т. Д. На эту машину с Ubuntu 10.04), и я пытаюсь внедрить базовый эшафот Member. Моя версия рельсов 3.0.0, а мой ruby ​​1.9.2.

Когда я #rails generate scaffold Member email:string password:string создает различные файлы. Я также сделал #rake db:migrate для реализации базы данных в MySQL. В контроллере я увидел, что мне нужно пройти 127.0.0.1:3000/members/, чтобы перейти к базовой настройке скаффолда.

Я только что изменился

def new
  @member = Member.new

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

вышеуказанные операторы в элементе контроллера в

def register
  @member = Member.new

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

Видите ли, я только что изменил новый в регистр, и теперь, когда я пытаюсь попасть в 127.0.0.1:3000/members/register Появляется ошибка ActiveRecord::RecordNotFound. Как я могу решить эту проблему? Я просто хочу сделать 127.0.0.1:3000/members/register быть страницей, на которой пользователь может зарегистрироваться ..

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

Ответы [ 3 ]

5 голосов
/ 12 октября 2010

При использовании генератора генератора элементы отображаются как ресурс.Посмотрите на config/routes.rb

resources :members

Когда объекты отображаются как ресурсы, они получают набор маршрутов по умолчанию.Вы можете просмотреть все свои сопоставленные маршруты, выполнив rake routes

members GET     /members(.:format)          {:action=>"index", :controller=>" members"}
members POST    /members(.:format)          {:action=>"create", :controller=> "members"}
new_member GET  /members/new(.:format)      {:action=>"new", :controller=>"members"}
edit_member GET /members/:id/edit(.:format) {:action=>"edit", :controller=>"members"}
member GET      /members/:id(.:format)      {:action=>"show", :controller=>"members"}
member PUT      /members/:id(.:format)      {:action=>"update", :controller=>"members"}
member DELETE   /members/:id(.:format)      {:action=>"destroy", :controller=>"members"}

Когда вы переименуете действие new в register, больше не будет действительного маршрута для этого сопоставления.

Что вы можете сделать, это оставить действие как new и просто добавить следующий маршрут в routes.rb

match 'members/register' => 'members#new'

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

0 голосов
/ 09 января 2012

У меня была та же проблема при создании нового html.erb.
Даже мои маршруты. Rb совпадают с 'controller / action' => 'controller # action' , которые были правильными.
Позже я обнаружил, что проблема заключалась в том, что ресурсы : контроллер были выше совпадения.

Это правильный порядок, который работал для меня:

соответствует 'controller / action' => 'controller # action'
ресурсы: controller

Спасибо pavlo за этот вопрос и maz , потому что его ответ дал мне подсказку, что ресурсы были вовлечены в ошибку.

0 голосов
/ 12 октября 2010

Вам необходимо добавить метод 'register' к маршрутам, например: -

map.connect '/ members / register',: controller => 'members',: action => 'register'.

После добавления вышеперечисленного в route.rb перезапустите сервер.

Спасибо, Анубхоу

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...