RoR: перед возвращением фильтра false не останавливает работу формы действия - PullRequest
0 голосов
/ 14 июля 2011

В моем тесте я делаю это:

     delete :destroy, :id => p.id
     assert_equal "You do not have permission to delete this Object.", flash[:error]
     Object.find_by_id(p.id).should_not be_nil #line 48 (reffed by console output below)

и мой фильтр до этого имеет путы, поэтому я знаю, что результат ложный и не возвращает

  before_filter lambda { |controller| 
      result = controller.is_object_on_same_account_as_current_account_for_id?(
                  controller_name.classify.constantize, 
                  controller.params[:id])
      puts result
      return if result
  }, :only => [:destroy]

в соответствии с этой страницей: http://citizen428.net/archives/846, действия, связанные с фильтром, выполняются только в случае возврата фильтра.

А вот вывод консоли:

Started
false
F
Finished in 0.865708 seconds.

  1) Failure:
test: .... ...
blah blah, issue is on line 48

     shoulda (2.11.3) lib/shoulda/context.rb:382:in `...']:
expected: not nil
     got: nil

Итак ... что происходит здесь?Я совершенно невежественен.

связанный код:

метод уничтожения:

 def destroy
    @content.destroy 

Нет, я провожу только один тест.

1 Ответ

4 голосов
/ 14 июля 2011

Согласно официальным Rails Docs , правильный способ помешать выполнению действия с before_filter - это фактически перенаправить или визуализировать внутри фильтра.

Так что вы, вероятно, захотите:

before_filter lambda { |controller| 
      result = controller.is_object_on_same_account_as_current_account_for_id?(
                  controller_name.classify.constantize, 
                  controller.params[:id])
      puts result
      if !result
        flash[:error] = "You do not have permission to delete this Object."
        redirect_to "/" # or wherever you want to redirect to
      end
  }, :only => [:destroy]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...