我正在使用包含用户控制器和图像控制器的rails应用程序。这是Images控制器中的create方法:
def create
@image = current_user.images.build(image_params)
if @image.save
flash[:success] = "Image uploaded!"
redirect_to current_user
else
render 'users/show' #Error occurs here
end
end
成功保存处理得很好,但如果图片太大或不存在且用户/显示'渲染时,rails会给出错误:
NoMethodError (undefined method `name' for nil:NilClass):
app/views/users/show.html.erb:1:in `_app_views_users_show_html_erb___2850090823537495038_37901140'
app/controllers/images_controller.rb:12:in `create'
我预计会发生这种情况,因为我没有初始化' users / show'所需的所有变量。在我的Images控制器中,所以我将内容从Users控制器的show方法移动到Application控制器中的新方法,并在从Images渲染页面之前调用它。这是intitialize方法:
def initialize_show
@user = User.find(params[:id])
@images = @user.images.paginate(page: params[:page])
@image = current_user.images.build if logged_in?
end
新的创建方法:
def create
@image = current_user.images.build(image_params)
if @image.save
flash[:success] = "Image uploaded!"
redirect_to current_user
else
initialize_show # Called this method
render 'users/show'
end
end
现在rails正在给出错误:
ActiveRecord::RecordNotFound (Couldn't find User with 'id'=):
app/controllers/application_controller.rb:6:in `initialize_show'
app/controllers/images_controller.rb:12:in `create'
我在这里缺少什么?这是我的第一个rails应用程序,所以我很感激帮助。
答案 0 :(得分:0)
ptd在上面的评论中提供了答案。 @user
未初始化,因为id
参数未发布到images#create
。这是解决方案:
def create
@image = current_user.images.build(image_params)
if @image.save
flash[:success] = "Image uploaded!"
redirect_to current_user
else
@user = current_user
initialize_show # I removed the @user initialization in this method
render 'users/show'
end
end
答案 1 :(得分:0)
看起来你的模板(users/show
)使用了在这种情况下不可用的东西(@vars)。你能展示一下模板代码吗?也许你在那里有一些行@user.name
但是如果你描述了这个变量,那么这个var就没有初始化......