拯救“undefined method”错误

4

我有些困惑,不知道该怎么做。

尝试进行一个

rescue_from NoMethodError, :with => :try_some_options

但是它没有起作用。
编辑: 为了测试,我正在进行简单的重定向。
def try_some_options
 redirect_to root_url
end

编辑2:我的控制器示例。如下建议,添加了异常处理。

我知道我得到错误的原因。使用Authlogic和authlogic_facebook_connect插件。当用户从Facebook插件创建时,与用户相关联的“MyCar”模型不会像本地注册用户一样正常创建。由于我在不同部分引用用户车辆并调用用户模型,因此我想做类似下面看到的操作,并最终将其放入我的application_controller中。

class UsersController < ApplicationController
 before_filter :login_required, :except => [:new, :create]
 rescue_from NoMethodError, :with => :try_some_options

 ...

 def show
    store_target_location
    @user = current_user
  end

 def create
  @user = User.new(params[:user])
  if @user.save
    MyCar.create!(:user => @user)
    flash[:notice] = "Successfully created profile."
    redirect_to profile_path
  else
    render :action => 'new'
  end
 end
 ...

 protected

 def try_some_options(exception)
    if logged_in? && current_user.my_car.blank?
       MyCar.create!(:user => current_user)
       redirect_to_target_or_default profile_path
    end
 end
 ...
end

第三次编辑:目前已经进行了黑客攻击,因为我知道为什么会出现错误,但是我想找出如何拯救 NoMethodError

class UsersController < ApplicationController
 before_filter :login_required, :except => [:new, :create]
 before_filter :add_car_if_missing

 def add_car_if_missing
   if logged_in? && current_user.my_car.blank?
     MyCar.create!(:user => current_user)
   end
 end
end

你能解释一下你所说的“它不起作用”是什么意思吗? - mportiz08
它没有触发“try_some_options”方法。 - pcasa
触发此异常的代码是什么样子的? - Ben Marini
你确定 NoMethodError 是在 UsersController 中抛出的吗?也许你正在重定向到另一个控制器,那里还没有解决 NoMethodError。 - Mischa
我知道我在不同的部分中调用了用户和用户的汽车,但只在“显示”中引用了一次。这是我现在关注的重点。 - pcasa
1个回答

8

我在尝试解决同样的问题时读了你的帖子,最终我做了以下操作:

class ExampleController < ApplicationController
  rescue_from Exception, :with => :render_404
  ...

private

  def render_404(exception = nil)
    logger.info "Exception, redirecting: #{exception.message}" if exception
    render(:action => :index)
  end
end

这对我很有帮助。虽然它是一个万能情况,但它可能会帮助到你。祝一切顺利。


1
这绝对是最好的答案……即使是9年后! - Paul D.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接