2010-10-12 2 views
1

Прошу прощения за мой плохой английский. Я только что установил рубины и рельсы несколько часов назад (вы не поверили, что мне потребовалось 3 дня для установки рубинов, rvm, рельсов и т. Д. На этом компьютере ubuntu 10.04), и я пытаюсь реализовать базовый эскиз элемента. Моя версия рельсов 3.0.0, а мой рубин - 1.9.2.ActiveRecord :: RecordNotFound в MembersController # show

Когда я #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 

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

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

ответ

0

Вам нужно добавить «зарегистрировать» метод маршрутов, как: -

map.connect «/ Участники/зарегистрироваться», : controller => 'members',: action => 'register'.

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

Спасибо, Anubhaw

+1

Вы имеете в виду просто put -> map.connect '/ members/register',: controller => 'members',: action => 'register' <- в файле route.rb? Я сделал это, но я получаю неопределенную локальную переменную или метод 'map 'для # (NameError) – pavlo

+0

Вам нужно поставить вышеприведенную строку как ActionController :: Routing :: Routes .draw do | map | map.connect '/ members/register',: controller => 'members',: action => 'register' end – Anubhaw

+0

Я не уверен, что это верно для рельсов 3. Маршрут сильно изменился iirc. – Shadwell

5

С помощью членов генератора эшафота получает отображаются как ресурс. Посмотрите в 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

Привет, спасибо за хороший ответ. Теперь я получаю, как рельсы 3 выполняются при картографировании. :) – pavlo

+0

Привет снова. Если я хочу установить что-то вроде – pavlo

+0

edit_password_member GET /members/:id/edit_password(.:format) {: action => "edit_password",: controller => "members"} Где я могу это сделать? в файле маршрутов? – pavlo

0

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

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

матч 'контроллер/действие' => 'контроллер # действие'
ресурсы: контроллер

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

Смежные вопросы