【问题标题】:Couldn't find User without an ID with one_to_one association找不到具有 one_to_one 关联的 ID 的用户
【发布时间】:2013-08-11 23:49:05
【问题描述】:

我是 Rails 新手,遇到嵌套路由问题。

我有用户,每个用户在单独的模型中都有一个配置文件。尝试访问用户配置文件

/users/1/profile

产生错误:

找不到没有 ID 的用户

请求参数显示:

{"user_id"=>"1"}

有人问过类似的问题,但找不到解决办法。

路线:

resources :users do
  resource :profile
end

配置文件控制器:

class ProfilesController < ApplicationController
  def show
    @user_profile = User.find(params[:id]).profile
  end
end

来自用户模型:

has_one :profile, dependent: :destroy
before_create :build_profile

来自配置文件模型:

belongs_to :user

我猜User.find(params[:id]).profile 是我出错的地方。我把find(params[:id])改成了first,成功返回了第一个用户的个人资料。

不胜感激!

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    用户 ID 将以 params[:user_id] 出现。检查您的日志以了解正在传递和解释的参数。 params[:id] 不存在。

    【讨论】:

      【解决方案2】:

      我同意你的路线设计,它应该不会比简单的个人资料显示更复杂。

      但是有一些问题:

      1. routes.rb 中的路由应该是

        resources :user do
          member do
            get 'profile'
          end
        end
        

        这将允许user/1/profile 路由

      2. 根据上面的路由,profile 方法应该在 UsersController 而不是配置文件控制器中。 (在这种情况下不需要配置文件控制器)

        class UsersController < ApplictionController
          def profile
            user = User.find(params[:id])
            @profile = user.profile
          end
        end
        

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-15
        • 1970-01-01
        • 2015-10-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-24
        相关资源
        最近更新 更多