我正在做Railssite.我在重定向到另一种形式时遇到了问题.我做了很多事情来修复它,但是我无法找出code..anyone中有什么问题,请帮助我修复它,..please
误差
←[36m2014-04-23T05:46:13.280376+00:00 app[web.1]:←[0m NoMethodError (undefined m
ethod `invitation_type' for nil:NilClass):
←[36m2014-04-23T05:46:13.280378+00:00 app[web.1]:←[0m app/controllers/vectors_controller.rb in invited_new代码:
class VectorsController < ApplicationController
def create
ui = UserInvitation.where(hash_code: session[:hash_code]).first
@vector = Vector.new(vector_params.merge({user_id: current_user.id, vector_type: ui.invitation_type}))
respond_to do |format|
if @vector.save
ui.completed_registration = true
ui.save
session[:hash_code] = nil
flash[:notice] = "You're all set! Welcome to Availendar!"
format.html {redirect_to vector_path(@vector.id)}
else
flash[:alert] = "Oops, looks like there's been a problem. Please correct it and try again."
format.html {render action: :invited_new}
end
end
end
def invited_new
@user_invitation = UserInvitation.where(hash_code: session[:hash_code]).first
#raise ArgumentError "Cannot find invitation with hash_code #{session[:hash_code]}" unless @user_invitation.present?
@vector = Vector.new(user: current_user, vector_type: @user_invitation.invitation_type)
@vector.build_address
end
////create action///def创建ui = UserInvitation.where(hash_code: session:hash_code).first @vector =Vector.new({user_id: current_user.id,( vendor_type: ui.invitation_type})如果@vector.save ui.completed_registration = true ui.save session:hash_code = nil format.html {redirect_to vector_path(@vector.id)} @vector.save format.html {呈现操作::invited_new} end end )
发布于 2014-04-23 06:09:49
在您的invited_new操作中,@user_invitation变为空白,因为它显示了此错误,下面是解决方案
def invited_new
@user_invitation = UserInvitation.where(hash_code: session[:hash_code]).first
unless @user_invitation.blank?
@vector = Vector.new(user: current_user, vector_type: @user_invitation.invitation_type)
@vector.build_address
end
end发布于 2014-04-23 06:00:24
您将unless用于if,错误也是如此。
更改这一行
unless @user_invitation.present? #=> false至
if @user_invitation.present? #=> true
def invited_new
@user_invitation = UserInvitation.where(hash_code: session[:hash_code]).first
if @user_invitation.present?
@vector = Vector.new(user: current_user, vector_type: @user_invitation.invitation_type)
@vector.build_address
end发布于 2014-04-23 06:18:07
好的,让我们试着一步一步地分解它:
问题
UserInvitation.where(hash_code: session:hash_code)
nil (第一个空白数组为零,对!)@user_invitation = UserInvitation.where(hash_code: session:hash_code).first
invitation_type为nil:NilClass)@user_invitation.invitation_type
溶液
相反,使用试一试,如名称所示,它将尝试获取属性,或者在调用nil对象时只返回nil,因此您的方法应该如下所示:
class VectorsController < ApplicationController
def create
ui = UserInvitation.where(hash_code: session[:hash_code]).first
@vector = Vector.new(vector_params.merge({user_id: current_user.id, vector_type: ui.try(:invitation_type)}))
respond_to do |format|
if @vector.save
ui.completed_registration = true
ui.save
session[:hash_code] = nil
flash[:notice] = "You're all set! Welcome to Availendar!"
format.html {redirect_to vector_path(@vector.id)}
else
flash[:alert] = "Oops, looks like there's been a problem. Please correct it and try again."
format.html {render action: :invited_new}
end
end
end
def invited_new
@user_invitation = UserInvitation.where(hash_code: session[:hash_code]).first
#raise ArgumentError "Cannot find invitation with hash_code #{session[:hash_code]}" unless @user_invitation.present?
@vector = Vector.new(user: current_user, vector_type: @user_invitation.try(:invitation_type))
@vector.build_address
end
endhttps://stackoverflow.com/questions/23235913
复制相似问题