“无法找到没有ID的用户”ActiveRecord错误和编辑问题

时间:2014-01-19 01:19:13

标签: ruby-on-rails ruby activerecord

所以我在使用rails应用程序时遇到了一些麻烦,我觉得我有点超出自己的深度。我正在创建一个简单的校友应用程序,我希望用户能够加入组织。出于某种原因,在我的新加入页面中,我收到错误“无法找到没有ID的用户”。我想知道为什么ID没有传入,这意味着signed_in? =假。当我向用户控制器创建其他添加内容时,我不知道为什么一切都能找到,但在这里它拒绝接受已登录的用户ID。我觉得我错过了一些简单的事情,请告诉我是否有必要进行更新!

以下是我的用户控制器中的相关信息:

class UsersController < ApplicationController
before_action :signed_in_user, only: [:edit, :update, :index, :show, :join]
before_action :correct_user,   only: [:edit, :update, :join]
before_action :admin_user,     only: :destroy

def join
end

def show
   @user = User.find(params[:id])
   @organization = @user.organization
end

def create
   @user = User.new(user_params)
   if @user.save
       sign_in @user
       flash[:success] = "Welcome to the Sample App!"
       redirect_to @user
  else
      render 'new'
  end
end
...
      private

def user_params
    params.require(:user).permit(:name,:email, :password, :password_confirmation,:organization_id)
end


def signed_in_user
  unless signed_in?
    store_location
    redirect_to signin_url, notice: "Please sign in."
  end
end

def correct_user
  @user = User.find(params[:id])
  redirect_to(root_url) unless current_user?(@user)
end

def admin_user
  redirect_to(root_url) unless current_user.admin?
end
end

我包含了def创建方法,因为我尝试编辑它以在登录后立即将用户重定向到加入页面,但后来我遇到了这个错误,我认为这是问题,所以我将其切换回来。我想它不是....注意:如果有用的话,我会将这个应用程序基于Hartl教程。

3 个答案:

答案 0 :(得分:0)

您应该拥有一个Memberships控制器和带有belongs_to:user的模型(has_many:User&amp; Organization的成员资格),而不是在Users控制器中定义join方法。控制器应负责添加/删除组织用户成员资格。从该控制器,您可以通过@user = User.find(:id)获取用户信息,并且不要忘记为嵌套资源正确设置路由文件。

resources :users do
    resources :memberships
end

另请注意,您的join方法不会为视图创建任何实例变量(@user)。看起来它正确地通过了signed_in_user操作,但在join方法中没有实例化。

答案 1 :(得分:0)

将第3行更改为:

before_action :correct_user, only: [:edit, :update]

如果“加入”的目的是创建用户,那么就不应该有用户。但是,如果您“加入”的目的是获取当前用户,则应将其添加到您的加入方法中:

@user = current_user

答案 2 :(得分:-3)

如果你改成它怎么样:

def show
@users = User.all
@user = @users.find(params[:id])
@organization = @user.organization
end