我有一个rails控制器,其中定义了两个操作:index
和show
。
我在index
动作中定义了一个实例变量。代码如下所示:
def index
@some_instance_variable = foo
end
def show
# some code
end
如何访问@some_instance_variable
模板中的show.html.erb
?
答案 0 :(得分:55)
您可以使用前置过滤器为多个操作定义实例变量,例如:
class FooController < ApplicationController
before_filter :common_content, :only => [:index, :show]
def common_content
@some_instance_variable = :foo
end
end
现在可以从@some_instance_variable
或index
操作呈现的所有模板(包括部分模板)访问show
。
答案 1 :(得分:12)
除非您从show.html.erb
操作中呈现index
,否则您还需要在show动作中设置@some_instance_variable
。调用控制器操作时,它会调用匹配方法 - 因此在使用index
操作时,不会调用show
方法的内容。
如果您需要在@some_instance_variable
和index
操作中将show
设置为相同的内容,则正确的方法是定义另一个方法,由index
调用和show
,用于设置实例变量。
def index
set_up_instance_variable
end
def show
set_up_instance_variable
end
private
def set_up_instance_variable
@some_instance_variable = foo
end
如果您有通配符路由(即set_up_instance_variable
)
match ':controller(/:action(/:id(.:format)))'
方法设为私有可防止将其作为控制器操作调用