【问题标题】:Does this rails code belong in Application Controller?这个rails代码是否属于应用程序控制器?
【发布时间】:2011-07-22 21:41:26
【问题描述】:

我有一些代码(正在运行),但我只是想确保按照 Rails 约定/最佳实践将它放在正确的位置。代码的目的是在定义“@facility”的情况下生成一组副标题导航链接(这可以在几个控制器中的一个中完成)。现在,我有以下代码,如下所示。

我的问题:这感觉不对,尤其是 html 模板开头的一些逻辑。我还想定义一些其他类似的助手来根据不同的模型定义这些副标题链接。这个逻辑(设置@subhead_links)应该在应用程序控制器中吗?作为每个模型中的方法(所以我会设置@subhead_links = @facility.subhead_links)?

我已经寻找了一些答案,但这类哲学问题不像错误代码那样容易通过谷歌搜索。

在应用程序助手中

  # build subhead
  def subhead_links(facility)
      links = [
          { :label => "Configure Facility", :path => facility_path(facility) },
          { :label => "Waitlists", :path => waitlist_tiers_path(:id => facility.id) },
          { :label => "Applications", :path => sponsors_path(:id => facility.id) }
      return links
  end

在 application.html.erb 模板中包含的部分

<% if @facility %>
  <% @subhead_links = subhead_links(@facility) %>
<% end %>

<% if @subhead_links %>
  <nav class="subnav">
    <ul>
    <% @subhead_links.each do |link| %>
      <li><%= link_to link[:label], link[:path] %></li>
    <% end %>
    </ul>
  </nav>
<% end %>

在其他各种控制器中...

@facility = Facility.find(params[:id])

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3


    【解决方案1】:

    我从不依赖局部变量中的实例变量,并尝试将尽可能多的逻辑放在帮助程序中。

    这将导致以下结果:

    应用程序布局:

    <%= render_subhead_links(@facility) %>
    

    application_helper:

    def render_subhead_links(facility)
      if facility
        links = [
          { :label => "Configure Facility", :path => facility_path(facility) },
          { :label => "Waitlists", :path => waitlist_tiers_path(:id => facility.id) },
          { :label => "Applications", :path => sponsors_path(:id => facility.id) }
        render :partial_name, :links => links
      end
    end
    

    部分:

    <nav class="subnav">
      <ul>
        <% links.each do |link| %>
          <li><%= link_to link[:label], link[:path] %></li>
        <% end %>
      </ul>
    </nav>
    

    【讨论】:

    • 谢谢!那么,我在 application_helper 作为这种逻辑的地方(与 Facility 模型相反)通常是正确的吗?
    • 是的,如果你在多个控制器中显示相同的部分,那是正确的地方。
    • 我现在不确定,这真的可以跨控制器使用吗?
    • 嗯,是的。 (尽管这引发了我的另一个新手问题)。现在有几个控制器管理所有属于一个设施的信息位。我想知道这些控制器是否应该以某种方式嵌套在 Facility 控制器下,但我还没有在迄今为止遇到的有限 rails 示例中看到这一点。如此简短的回答:是的,它目前用于其他控制器。
    • 好的,非常完美。请记住,如果需要,您可以创建量身定制的布局,并且您还可以使用精彩的 content_for :whatever
    猜你喜欢
    • 1970-01-01
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    • 2012-09-03
    • 2011-08-01
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    相关资源
    最近更新 更多