我正在學習RoR,我很喜歡我發現的所有東西。我正在從基於PHP的CodeIgniter框架切換,並且在使用redirect_to方法時遇到問題。Rails redirect_to REST
我已經定義了一個基本的用戶模型,我用它來處理註冊 - 數據在數據庫中得到良好存儲,但問題是在將用戶註冊到系統後重定向。
基本上,個人資料頁的格式如下:/用戶/:名稱/: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
是很有道理的,我從那個個人資料頁URL看起來像一個SEO點。我一直在尋找互聯網,但我只找到解決不同問題的辦法。我希望有人能幫幫忙。
已解決 Ryan建議的兩個版本都運行良好,我決定堅持第二個版本,因爲它感覺更加RESTful。我只是分享我現在的配置 - 請注意,用戶模型可能並不完全正確,但它的to_param函數非常重要。此外,我注意到,如果我將私有這個功能合理化,那麼它就不起作用 - 這是有道理的,但我只是認爲我會將其分享給可能遇到此類問題的人。
這是我的路線文件:
resources :users
這裏是我的用戶模型:
class User < ActiveRecord::Base
attr_accessible :name, :email
email_regex = /\A[\w+\-.][email protected][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
,這裏是我的控制器創建功能:
def create
@title = "User creation"
@user = User.new(params[:user])
if @user.save
redirect_to @user
else
@title = 'Sign Up'
render 'new'
end
end
太棒了!正是我需要的。我測試了兩個版本,他們都完美地工作。非常感謝! –