尝试路由到用户配置文件:找不到没有ID的用户

时间:2013-11-28 22:03:27

标签: ruby-on-rails authentication devise

以下是我的路线:

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 个答案:

答案 0 :(得分: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 gem。您的解决方案可行,但需要进一步调整。不要忘记在username列中添加索引。

答案 1 :(得分:0)

对于友好网址,例如yoursite.com/user/delacram,您需要使用诸如friendlyId之类的gem来处理它。

查看此railscast episode