【问题标题】:Devise - ActiveRecord::RecordNotFound设计 - ActiveRecord::RecordNotFound
【发布时间】:2016-01-22 00:30:17
【问题描述】:

我希望用户有一个自己的页面,/users/52。所以我确实添加了一个新的控制器来实现这一点,控制器是 user_controller.rb。 但是现在,其他功能不起作用。

当我有如下路线时。 /users/sign_in 不起作用。 但是 /users/1 确实有效。

#Users/show!!!
  match 'users/:id' => 'users#show', via: :get
  # or 
  get 'users/:id' => 'users#show'
  # or
  resources :users

  devise_for :users, controllers: {
          sessions: 'users/sessions'
  }

当我使用如下路线时。 /users/1 不起作用,但 users/sign_in 起作用。

  

  devise_for :users, controllers: {
          sessions: 'users/sessions'
  }

class UsersController < ApplicationController

#def show
#	@user = User.friendly.find(params[:id])
#	@links = Link.all.where(user_id: @user).publish
#end

def index
	@users = User.all
end

def show

	@user = User.friendly.find(params[:id])
	@links = Link.all.where(user_id: @user).publish
end

def new
	
end



end

【问题讨论】:

  • 您是否创建了您尝试登录的用户,该错误表示在数据库中未找到某些内容(很可能是该用户)
  • 用户已创建。因为如果我删除这些行,我可以登录网站: match 'users/:id' => 'users#show', via: :get # or get 'users/:id' => 'users#show' # or资源:用户
  • 你试过resources :users, only: [:show]吗?恐怕其他选项不起作用,因为设计操作将被解释为一个 ID(即在/users/sign_in 中,新的将作为id: 'sign_in' 传递给您的用户控制器)。此外,除非您将resources 限制为:show,否则它可能会掩盖设计的路线。

标签: ruby-on-rails ruby activerecord devise


【解决方案1】:

我认为您只需要在设计声明之后移动resources :users(或您拥有的其他变体)。首先出现的映射在路由文件中具有优先级,因此所有“用户/任何”类型的获取请求都将匹配您的 users#show 操作,并且永远不会到达设计控制器。让我们来看一个例子:

当用户尝试访问users/sign_in 时,rails 开始将路径与您的路由文件中的映射从上到下匹配,当它到达users/:id 时,它假定'sign_in' 是@ 的值987654324@(因为路径结构匹配),所以它选择了users#show 动作,如果你查看显示动作中的参数,你会看到id 已经给出了值'sign_in'。

如果您将users/:id 映射放在devise_for 块之后,则输入路径将首先匹配更严格的映射(例如,只有路径users/sign_in 会匹配users/sign_in 的映射),然后是更宽的@ 987654331@

所以,简而言之:

devise_for :users, controllers: {
      sessions: 'users/sessions'
}
resources :users

会起作用的。

【讨论】:

    【解决方案2】:

    发生的情况是,当请求“users/sing_in”时,您的控制器正在寻找 id 为“sign_in”的记录,但该记录不存在,因此找不到 activerecord 错误。

    您应该将 get 'users/:id' => 'users#show' 放在 "devise_for" 块之后,不要放在之前。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-31
      • 2018-01-30
      • 2013-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多