0

我试图使用应用程序助手呈现动态导航菜单,但得到的只是一个哈希

当我加载页面时,这就是它显示的全部内容

[#<Project id: 15, title: "downer", created_at: "2012-07-03 08:36:16", updated_at: "2012-07-03 08:36:16", company_id: 2>]

这是应用程序助手中使用的代码

def project_list(user)
    company ||= user.profile.company
    projects ||= company.projects 
    projects.each do |project|
      link_to project.title, company_project_path(company, project)
      project.scopes.each do |scope|
        link_to scope.name, company_project_scope_path(scope.company, scope.project, scope)
      end
    end
  end

_nav.erb.html

<%= project_list(current_user) %>
4

2 回答 2

2

在 ruby​​ 中,方法默认返回最后一个计算的表达式。此外,each返回被迭代的数组/哈希。因此,您project_list实际上正在返回projects视图。您应该更改方法以返回要插入的 html:

def project_list(user)
  html = ''
  company ||= user.profile.company
  projects ||= company.projects 
  projects.each do |project|
    html += link_to project.title, company_project_path(company, project)
    project.scopes.each do |scope|
      html+= link_to(scope.name, company_project_scope_path(scope.company, scope.project, scope))
    end
  end
  return html.html_safe
end
于 2012-07-09T12:55:10.000 回答
0

您的可枚举#each 正在返回集合中的最后一个对象,该对象成为项目列表方法的返回值。

您需要建立一个标签列表,然后返回该对象。

如果您使用的是 1.9.2,则可以将 each_with_object 与作为 on 对象的字符串或可以在返回之前加入的数组一起使用。

于 2012-07-09T12:50:00.183 回答