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