Я нахожусь в процессе изучения RoR, и мне нравится все, что я открываю до сих пор.Я переключаюсь с платформы CodeIgniter на основе PHP, и у меня возникает проблема с использованием метода redirect_to .
Я определил базовую модель Users, которую я использую для обработки регистрации- данные отлично сохраняются в БД, но проблема заключается в перенаправлении после регистрации пользователя в системе.
По сути, страница профиля имеет следующий формат: / users /: name /: id
У меня есть файл маршрутов, определенный следующим образом:
resources :users
match '/users/:name/:id', :to => 'users#show'
А вот мой метод создания
def create
@title = "User creation"
@user = User.new(params[:user])
if @user.save
info = { :name => @user.name, :id => @user.id }
redirect_to info.merge(:action => "show")
else
@title = 'Sign Up'
render 'new'
end
end
Однако это сгенерирует URL следующего формата:
http://localhost:3000/users/27?name=Testing
Когда я на самом деле ищу что-то вроде этого:
http://localhost:3000/users/Testing/27
Это просто имеет смысл для меня с точки зрения SEOс точки зрения, что URL страницы профиля выглядит так.Я искал интер-сети, но я только нахожу решения различных проблем.Я надеюсь, что кто-то может помочь.
решено Обе версии, предложенные Райаном, работали нормально, и я решил придерживаться второй, так как она кажется более RESTful.Я просто поделюсь конфигом, который у меня есть сейчас - учтите, модель User может быть не совсем правильной, но важна функция to_param.Кроме того, я заметил, что это не работает, если я сделаю функцию private - это имеет смысл, но я просто подумал, что поделюсь этим для кого-то, кто может столкнуться с такой проблемой.
Вот мой файл маршрутов:
resources :users
А вот моя модель Users:
class User < ActiveRecord::Base
attr_accessible :name, :email
email_regex = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :name,
:presence => true,
:length => { :within => 5..50 }
validates :email,
:presence => true,
:format => { :with => email_regex},
:uniqueness => { :case_sensitive => false }
def to_param
"#{id}-#{name.parameterize}"
end
end
А вот мой контроллер create function:
def create
@title = "User creation"
@user = User.new(params[:user])
if @user.save
redirect_to @user
else
@title = 'Sign Up'
render 'new'
end
end