我正在试着做一个应用程序
有了用户,这个用户可以加入多个组-每个组在页面上都有相同的菜单,他们的组页面可以访问关于group/1或group/2的内容
所以我想把菜单放在application.html.erb里,lnk依赖于group.id --但是我不知道如何在application.html.erb里访问这个id
发布于 2011-01-19 08:50:41
这通常是在布局中使用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 %>在helper中(显然是人为设计的例子)
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发布于 2011-01-19 05:40:54
正确的方法是通过before_filter在ApplicationController中设置它,并将其用作视图中的实例变量。
所以在控制器中设置类似@links =的逻辑,你可以根据当前用户计算你的链接。
在视图中,您可以执行以下操作:
<ul>
<%- for link in @links -%>
<li><%= link.title =>
<%- end -%.
</ul>当然,只有当您希望您的链接对所有控制器/视图都可用时,才可以在ApplicationController中设置@links,我想您确实是这样做的。
Rails单元格也可以在这里使用http://cells.rubyforge.org/
发布于 2011-01-22 23:24:21
我现在用不同的方式解决了我的问题。我在组模型中创建了一个“菜单”,并在application.html.erb中呈现为部分菜单
https://stackoverflow.com/questions/4729267
复制相似问题