从部分到容器的变量

时间:2014-08-15 19:51:28

标签: ruby-on-rails-4

目标

我需要在布局/views/layouts/application.html.erb上执行类似的操作:

<% if free %>
  <!-- do something -->
<% end %>

但是,free变量必须在部分或产生的视图上声明,而不是在控制器或模型中声明 - 这是一个可视化规则。

问题

目前,我正在/controllers/welcome.rb中执行以下操作:

def index
  @free = true
end

关键是:这不是控制器的责任,然后我不觉得这样的事情好。

环境

CentOS 6.5 with Rails 4.1。

1 个答案:

答案 0 :(得分:1)

  

这不是控制器的责任,然后我感觉不到   这样的事情很好。

我明白。虽然您不应该在视图中声明变量,但这可能会变得混乱。想象一下,如果变量存在错误,您将查看所有设置变量以查找问题的视图。恕我直言,在ApplicationController中将它声明为帮助器会更好,这样所有视图都会定义您的变量,并且由您决定是否使用它。

class ApplicationController < ActionController::Base

  helper_method :free

  protected
    def free
      true
    end
end 

通过这种方式,您可以覆盖&#39;免费&#39;其他控制器中的方法,如果free的值应该不同。