无法找到没有ID rails错误的用户

时间:2016-07-21 10:36:46

标签: ruby-on-rails

我是rails的新手,我不断收到此错误

找不到没有ID的用户

从:

    class UserController < ApplicationController
     def show
      @user = User.find(params[:id])
     end
    end

这就是我所拥有的;

模型/ user.rb

  class User < ActiveRecord::Base

      devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable
      validates :name, presence: true
      validates :email, presence: true

      has_many :listings, dependent: :destroy

      has_many :purchasing, class_name: "Transaction", foreign_key: "buyer_id", dependent: :destroy
      has_many :sell, class_name: "Transaction", foreign_key: "seller_id", dependent: :destroy


      has_many :purchased, class_name: "Archive", foreign_key: "buyer_id", dependent: :destroy
      has_many :sales, class_name: "Archive", foreign_key: "seller_id", dependent: :destroy

      has_many :selling_rooms, class_name: "Room", foreign_key: "seller_id", dependent: :destroy
      has_many :buying_room, class_name: "Room", foreign_key: "buyer_id", dependent: :destroy

     def can_buy?(listing_price)
      if self.points >= listing_price
        true
      else
        false
      end
     end

     def withdraw(listing_price)
      self.points -= listing_price
     end


    def purchasing_list
     purchasing.includes(:seller, :listing)
    end

    def purchased_list
     purchased.includes(:seller, :listing)
    end

    def sell_list
     sell.includes(:seller, :listing)
    end

    def sales_list
     sales.includes(:seller, :listing)
    end
  end

资源

    resources :users

我环顾四周,但我能找到的只是说它正在寻找一种不存在的资源。

4 个答案:

答案 0 :(得分:2)

似乎params[:id]没有出现。

首先尝试检查并放入

class UserController < ApplicationController
 def show
   logger"-----#{params[:id]}---"
    @user = User.find(params[:id])
 end
end

如果它为空,则从id传来link您收到此错误

ex. localhost:3000/users/1

此处params[:id] == 1必须

答案 1 :(得分:1)

在您的表单中将您重定向到用户显示页面的某些位置,您应该发送ID或发送对象本身。

<%= link_to 'Show', user_path(user) %>

<%= link_to 'Show', user_path(user.id) %>

答案 2 :(得分:0)

请检查参数,因为我知道您正在params[:id] = nil

尝试在你的参数中传递:id ,或者你可以通过硬编码来检查它。

答案 3 :(得分:0)

检查你的控制台!

在正在爆炸的请求中发送的参数中,请仔细查看您的发送ID是什么。是user_id吗?它是id吗?你的控制器期待id,所以请确保你传递一个。

如果您要传递整个对象,则需要指定。例如。如果您正在通过user,则需要通过user.id,因为您的控制器需要一个通常为数字的ID。 user将给出整个对象,user.id将只给出数字值,在这种情况下是ID。然后使用该数字,控制器操作可以在数据库中找到相关用户。