2008-10-28 6 views
1

Je les suivantes before_filter:partage de code dans des blocs de respond_to

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 

Je voudrais partager le code HTML et bloque JS. Y a-t-il un meilleur moyen que de simplement jeter le code dans une méthode? J'espérais que cela fonctionnerait:

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

Mais hélas, ce n'était pas le cas.

Répondre

3

Si je lis bien, il semblerait que find_current_membership soit votre méthode before_filter, n'est-ce pas? par exemple:

class SomeController < ApplicationController 
    before_filter :find_current_membership 
    ... 

Je pense qu'il est un peu non standard à utiliser respond_to dans un before_filter, ils sont destinés à faire quelque chose et de rendre en cas d'échec. Il me semble que vous voulez quelque chose de plus comme ça

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

Dans ce cas, vous pourriez probablement faire quelque chose comme:

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

Sinon, vous pouvez utiliser le request.format.rss? dans votre méthode de contrôleur pour charger conditionnellement les adhésions.

De toute façon, votre première étape devrait être de refactoriser cela dans une méthode.

1

Que diriez-vous de cette solution simple !?

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