/users/1
與
/username
我知道這意味着我來代替那種用戶配置文件的意見我們需要檢查各種碰撞。我請教以下類似的SO問題:
- Ruby on rails routing matching username
- customize rails url with username
- Routing in Rails making the Username an URL:
- routing error with :username in url
這裏是我已經試過各種失敗的routes.rb路由定義,和相關的錯誤:
match "/:username" => "users#show", via: "get"
這裏的錯誤:
ActiveRecord::RecordNotFound in UsersController#show Couldn't find User without an ID app/controllers/users_controller.rb:7:in `show'
這是我與users_controller:如上
6 def show 7 @user = User.find(params[:id]) 8 end
match "/:username" => 'users#show', :as => :profile
同樣的錯誤。
match "/:username", :controller => "users/:id", :action => 'show'
Routing Error uninitialized constant Users Try running rake routes for more information on available routes.
match '/:username', :controller => 'users', :action => 'show'
同樣的錯誤1.
match '/:username', to: 'users/:id', via: 'show'
服務器無法啓動。
match "/:username" => redirect("https://stackoverflow.com/users/:id")
錯誤:
ActiveRecord::RecordNotFound in UsersController#show Couldn't find User with id=:id
任何想法,爲什麼我的路由工作不相同的方式,其他人誰問這個問題的是什麼?
更新
只是把這個問題了意見,並把它的問題更乾淨。在通過下面的@Ryan Bigg進行更改後,我在創建新配置文件時重定向到配置文件時出現路由問題。這裏是我創建的代碼:
def create
@user = User.new(params[:user])
if @user.save
session[:user_id] = @user.id
flash[:success] = "Thank you for signing up."
redirect_to ('/'[email protected])
#redirect_to @user, notice: "Thank you for signing up!"
else
render "new"
end
end
這裏是我的user.rb
def to_param
self.username
#username
end
然而,註釋掉重定向,我認爲應與to_param更新工作,不工作,而醜陋的黑客在它之上。爲什麼to_param覆蓋,which worked for other people,不適用於我的應用程序?我的#update和#edit方法也不起作用,因爲如果覆蓋to_param不處理這個問題,它們的重定向轉到「users/1/edit」而不是「username/edit」。
我明白了。你能向我解釋當前控制器風格有什麼問題嗎?我應該如何正確地思考其他問題? – Mittenchops 2012-07-17 01:55:07
@Mittenchops更新回答。 – 2012-07-17 02:06:54
瑞恩,你已經非常徹底地回答了我的問題,但是我可以通過詢問如何命名重定向路線來跟進嗎?我正在嘗試這個,這是不工作,在我的創建用戶方法下:\t \t'@user = User.new(params [:user])\t if @ user.save redirect_to @ user.username' – Mittenchops 2012-07-17 15:36:53