【问题标题】:Pass a variable from view to the layout's partial view将变量从视图传递到布局的局部视图
【发布时间】:2010-05-07 18:40:30
【问题描述】:

我正在尝试使用部分来呈现应用程序的菜单,使用 CSS 大写“选项卡”,基于局部变量(选项卡):

  <%= link_to "employees", jobs_path, :class => (tab=="employees" ? "selected":"unselected") %>
  <a class="unselected">jobs</a>
  <%= link_to "tags", tags_path, :class => (tab=="tags" ? "selected":"unselected") %>

部分嵌入在应用程序的布局中:

<body>
...
<!-- tab variable needs to be set in the view, not the layout -->
<%= render :partial => "layouts/primary_menu", :locals => { :tab => "profiles" } %>
...
</body>

不幸的是,我需要在视图中设置变量的值,但该变量不可用。我应该使用 :content_for 符号而不是 :locals 吗?

在某些时候,我可能想将模型实例变量传递给部分,因此解决方案需要灵活。

有没有更好的方法?

【问题讨论】:

    标签: ruby-on-rails layout views partial-views


    【解决方案1】:

    我认为有多种方法可以解决这个问题,这里有一种 - 不一定是最好的

    <!-- layout -->
    <body>
        <%= yield(:tabs_navigation) %>
        ...
    </body>
    
    <!-- views -->
    <%- tabs_navigation(render :partial => "layouts/primary_menu", :locals => { :tab => "profiles" }) %>
    

    另一种方式 - 使用成员变量而不是本地变量(这有点像作弊 - 但有效)

    <!-- layout -->
    <body>
        <%= render :partial => "layouts/primary_menu" %>
        ....
    </body>
    
    <!-- views -->
    <%- @current_tab = "profiles" %> 
    

    现在直接在primary_menu部分访问@current_tab

    使用 content_for

    <!-- layout -->
    <body>
        <%= yield(:tabs_navigation) %>
        ...
    </body>
    
    <!-- views -->
    <%- content_for :tabs_navigation do -%>
        <%= render :partial => "layouts/primary_menu", :locals => { :tab => "profiles" } %>
    <%- end -%>
    

    http://guides.rubyonrails.org/layouts_and_rendering.html#understanding-yield

    【讨论】:

    • 添加内容_例如;当您只想更改单个变量的值时非常冗长
    【解决方案2】:

    我决定使用 link_to_unless_current UrlHelper:

    <%= link_to_unless_current "enroll", enroll_path, :class => "unselected" do
        link_to "enroll", enroll_path, :class => "selected"
    end %>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-28
      • 2019-11-14
      • 1970-01-01
      相关资源
      最近更新 更多