Совместное использование кода в блоках response_to - PullRequest
1 голос
/ 28 октября 2008

У меня есть следующее before_filter:

  def find_current_membership
    respond_to do |wants|
      wants.html { @current_membership = @group.memberships.for(@current_user) }
      wants.rss  {}
      wants.js   { @current_membership = @group.memberships.for(@current_user) }
    end
  end

Я хотел бы поделиться кодом для блоков HTML и JS. Есть ли лучший способ, чем просто бросить код в метод? Я надеялся, что это сработает:

  def find_current_membership
    respond_to do |wants|
      wants.rss  {}
      wants.all  { @current_membership = @group.memberships.for(@current_user) }
    end
  end

Но, увы, это не так.

Ответы [ 3 ]

3 голосов
/ 29 октября 2008

Если я правильно читаю, похоже, что find_current_membership это ваш before_filter метод, верно? например:

class SomeController < ApplicationController
  before_filter :find_current_membership
  ...

Я думаю, что это немного нестандартно - использовать respond_to внутри before_filter, они предназначены только для того, чтобы что-то делать и рендерить при неудаче. Мне кажется, что вы хотите что-то еще, как это

    class SomeController < ApplicationController
      before_filter :find_current_membership

      def some_action
        # stuff, or maybe nothing
      end

   private
      def find_current_membership
         @current_membership = @group.memberships.for(@current_user) unless request.format.rss?
      end
   end
2 голосов
/ 28 октября 2008

В этом случае вы могли бы сделать что-то вроде:

before_filter :only => :find_current_membership do |c|
    load_current_membership if not request.format.rss?
end

В качестве альтернативы вы можете использовать request.format.rss? в вашем методе контроллера, чтобы условно загрузить членство.

В любом случае, вашим первым шагом должно быть преобразование этого в метод.

1 голос
/ 29 октября 2008

Как насчет этого простого решения!?

def find_current_membership
  @current_membership = @group.memberships.for(@current_user)
  respond_to do |wants|
    wants.html
    wants.rss  {}
    wants.js
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...