是否可以从application.html.erb中的模型数据库表中访问值?

时间:2011-01-18 21:29:47

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

我正在尝试制作应用

与用户 此用户可以加入多个组 - 每个组在页面上都有相同的菜单 他们的组页面可以访问group / 1或group / 2

所以我想将菜单放在application.html.erb中,lnks取决于group.id - 但我不知道如何在application.html.erb中访问此id

3 个答案:

答案 0 :(得分:1)

正确的方法是通过ApplicationControllerbefore_filter中设置它,并将其用作视图中的实例变量。

因此,在控制器中设置类似@links =的逻辑,根据当前用户计算链接。

在视图中,您可以执行以下操作:

<ul>
  <%- for link in @links -%>
    <li><%= link.title =>
  <%- end -%.
</ul>

当然,只有当您希望链接可用于所有控制器/视图时,才在ApplicationController中设置@links。我认为您可以这样做。

Rails Cells也可以在http://cells.rubyforge.org/

使用

答案 1 :(得分:1)

这通常使用布局中的content_for来完成。假设您希望菜单位于application.html.erb中的某个div中:

# application.html.erb
<div id="menu_div>
  <ul>
  ... etc ...
  </ul>
</div>

yield语句替换内部内容:

<div id="menu_div>
  <%= yield :group_menu %>
</div>

然后在视图模板中添加content_for块:

# page
<% content_for :group_menu do %>
  <ul>
  ... etc ...
  </ul>
<% end %>

然后,每个页面模板可以在content_for块中定义自己的菜单代码。这可以通过在块中使用辅助方法并传入实例变量来进一步推广。

修改

假设在控制器中分配了@group,您可能会执行以下操作:

<% content_for :group_menu do %>
  <%= show_me_the_menu(@group) %>
<% end %>

和助手(显然是人为的例子)

def show_me_the_menu(group)
  content_tag :ul do
    group.users.collect do |user|
      concat(content_tag(:li, user.some_method))
    end
  end
end

答案 2 :(得分:0)

我现在用另一种方式解决了我的问题。我在组模型中创建了一个“菜单”,这个我在application.html.erb

中呈现部分