代码之家  ›  专栏  ›  技术社区  ›  Barry Hess

在响应块中共享代码

  •  1
  • Barry Hess  · 技术社区  · 17 年前

    我有以下内容 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 回复  |  直到 17 年前
        1
  •  3
  •   Cameron Booth    17 年前

    如果我读得对,它看起来像 find_current_membership 是你的 before_filter 方法,对吗?如:

    class SomeController < ApplicationController
      before_filter :find_current_membership
      ...
    

    我觉得用起来有点不标准 respond_to 里面 前置滤波器 他们只想做些事情,失败后再做。在我看来你想要更像这样的东西

        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
  •  2
  •   jonnii    17 年前

    在这种情况下,您可能会执行以下操作:

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

    或者您可以使用request.format.rss?在控制器方法中有条件地加载成员身份。

    不管怎样,第一步都应该将其重构为一个方法。

        3
  •  1
  •   allesklar    17 年前

    这个简单的解决方案怎么样??

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