所以我在使用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教程。
答案 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