我有以下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
但是,唉,它没有。
答案 0 :(得分:3)
如果我正确读到这一点,看起来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
答案 1 :(得分:2)
在这种情况下,您可能会执行以下操作:
before_filter :only => :find_current_membership do |c|
load_current_membership if not request.format.rss?
end
或者您可以使用request.format.rss?在您的控制器方法中有条件地加载成员资格。
无论哪种方式,您的第一步应该是将其重构为方法。
答案 2 :(得分:1)
这个简单的解决方案怎么样??
def find_current_membership
@current_membership = @group.memberships.for(@current_user)
respond_to do |wants|
wants.html
wants.rss {}
wants.js
end
end