以下是我的路线:
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
答案 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来处理它。