Ruby on rails 试图路由到用户配置文件:无法';找不到没有ID的用户
以下是我的路线:Ruby on rails 试图路由到用户配置文件:无法';找不到没有ID的用户,ruby-on-rails,authentication,devise,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
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
class UsersController
这是我的用户/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
class用户
对于友好的URL,如yoursite.com/user/delacram,您需要使用一个gem,如friendlyId来处理它
检查此设置,因为用户不会自动调用 您可以在过滤器之前添加
:
class UsersController < ApplicationController
before_filter :set_user, only: :show
def set_user
@user = User.find_by_name(params[:username])
end
end
正如@coletrain所提到的,查看friendly\u id
gem。您的解决方案将起作用,但需要进一步调整。别忘了给你的username
列添加一个索引。谢谢,但是漂亮的URL是第二个设置配置文件的方法。我选择了第二个选项,使用show方法。但是如何向username列添加索引呢@达米恩·罗塞格拉特。我更喜欢第二个选项,因为它是一个简单的控制器。有关在现有列上创建索引的详细说明,请参见此处:(简单迁移)我现在收到一个错误,该错误显示nil:NilClass“`@DylanRichards”的“未定义方法”`/code>username',尽管我相信您可能已经考虑过,但请确保username列是唯一的。@DylanRichards似乎在其他地方有问题。你能用你的用户模型更新吗?我还建议您打开Rails控制台来测试您的代码:User。按名称(“delacram”)查找以快速调试可能的查询问题。
class UsersController < ApplicationController
def show
@user = User.find_by_name(params[:username])
end
end