2013-11-28 50 views
0

這裏是我的路線:嘗試路由到用戶配置文件:不能沒有一個ID找到用戶

Stynyl::Application.routes.draw do 
    resources :things 

    devise_for :users 
    get '/about', to: 'pages#about' 
    root 'things#index' 

    get 'users/:username' => "users#show" 
end 

下面是用戶控制:

class UsersController < ApplicationController 
    def show 
    @user = User.find_by_name(params[:username]) 
    end 
end 

這裏是我的用戶/ show.html .erb

<p> 
    <strong><%= @user.username %></strong> 
</p> 

我知道這個視圖是基本的,但我只想看看它是否會打印出用戶的名字。

我使用用戶名'delacram'創建了一個用戶。當我輸入localhost:3000/users/delacram時,出現標題中顯示的錯誤。

有什麼問題?

我的用戶模型

class User < ActiveRecord::Base 
    # Include default devise modules. Others available are: 
    # :confirmable, :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

    has_many :things 

    validates :name, presence: true 
    validates :username, presence: true 
    validates :email, presence: true 
end 

回答

2

set_user沒有自動調用。

您可以添加一個before_filter

class UsersController < ApplicationController 
    before_filter :set_user, only: :show 

    def set_user 
    @user = User.find_by_name(params[:username]) 
    end 
end 

或者簡單地設置您的用戶show動作中:

class UsersController < ApplicationController 
    def show 
    @user = User.find_by_name(params[:username]) 
    end 
end 

正如@coletrain提到,考慮friendly_id寶石。你的解決方案將起作用,但它需要進一步調整。不要忘記爲您的username列添加索引。

+0

我已經用第二個選項,使用show方法。但是,如何向用戶名列添加索引? @Damien Roche –

+0

太好了。我更喜歡第二個選項,它是一個簡單的控制器。在這裏看到有關在現有列上創建索引的很好的解釋:http://stackoverflow.com/questions/15881749/adding-index-after-adding-column-rails(簡單的遷移) –

+0

我現在得到一個錯誤這說''未定義的方法'用戶名'爲零:NilClass「' –

0

對於友好的URL如yoursite.com/user/delacram您將需要使用的寶石,如friendlyId它處理這一點。

看看這個railscast episode

+0

謝謝,但漂亮的網址是次要的實際配置文件設置。 –

相關問題