rescue_from NoMethodError - PullRequest
       1

rescue_from NoMethodError

4 голосов
/ 03 сентября 2010

Проблемы с выяснением этого.

пытается сделать

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

РЕДАКТИРОВАНИЕ 3: Пока что взломал его, так как я знаю, почему появляется ошибка, но хотел бы выяснить, как спасти_от 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

1 Ответ

6 голосов
/ 19 мая 2011

Я просто читаю ваш пост, когда пытаюсь найти решение той же проблемы.В конце концов я сделал следующее:

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

Это хорошо сработалоЭто ловушка для всех ситуаций, но она может вам помочь.Всего наилучшего.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...