首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby :无方法error..Undefined方法invitation_type用于nil:NilClass

Ruby :无方法error..Undefined方法invitation_type用于nil:NilClass
EN

Stack Overflow用户
提问于 2014-04-23 05:56:53
回答 3查看 1.4K关注 0票数 1

我正在做Railssite.我在重定向到另一种形式时遇到了问题.我做了很多事情来修复它,但是我无法找出code..anyone中有什么问题,请帮助我修复它,..please

误差

代码语言:javascript
复制
←[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

代码:

代码语言:javascript
复制
    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 )

EN

回答 3

Stack Overflow用户

发布于 2014-04-23 06:09:49

在您的invited_new操作中,@user_invitation变为空白,因为它显示了此错误,下面是解决方案

代码语言:javascript
复制
  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
票数 3
EN

Stack Overflow用户

发布于 2014-04-23 06:00:24

您将unless用于if,错误也是如此。

更改这一行

代码语言:javascript
复制
unless @user_invitation.present? #=> false

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 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,因此您的方法应该如下所示:

代码语言:javascript
复制
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
end
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23235913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档