从应用程序助手渲染link_to

时间:2012-07-09 12:23:30

标签: ruby-on-rails actionview actionviewhelper

我尝试使用应用程序助手渲染动态导航菜单,但所有get都是哈希

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

[#<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) %>

2 个答案:

答案 0 :(得分:1)

在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

答案 1 :(得分:0)

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

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

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