我正在尝试制作应用
与用户 此用户可以加入多个组 - 每个组在页面上都有相同的菜单 他们的组页面可以访问group / 1或group / 2
所以我想将菜单放在application.html.erb中,lnks取决于group.id - 但我不知道如何在application.html.erb中访问此id
答案 0 :(得分:1)
正确的方法是通过ApplicationController
在before_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
中呈现部分