从返回的哈希中提取.name

时间:2013-04-20 12:55:24

标签: html ruby-on-rails ruby

我认为这可能比我做的更简单......

我目前在我的控制器(用户)中有这个

  def portfolios
    @title = "Portfolios"
    @user = User.find_by_permalink(params[:id])
    @portfolios = @user.portfolios
    @collections = @user.collections.find_all_by_portfolio_id(1)
    @collections = User.find_by_permalink(params[:id])
    render 'show_portfolios'
  end

这在我看来:

  <% @portfolios.each do |portfolio| %>
    <tr>
      <td><%= image_tag("portfolioIcon.png", alt: "Portfolio Logo")%></td>
      <td><%= portfolio.name %></td><br/>
    </tr>

    <tr>
      <% (1..@user.collections.find_all_by_portfolio_id(portfolio).length).each do |collection| %>
        <td><%= @user.collections.find_all_by_portfolio_id(portfolio) %></td><br/>
      <% end %>
    </tr>
  <% end %>

但它看起来会返回一个位于方括号中的哈希:

[#<Collection id: 1, user_id: 1, portfolio_id: 1, name: "User-1-Portfolio-1-Collection-1", created_at: "2013-04-20 10:45:46", updated_at: "2013-04-20 10:45:46">]

所以我不能只在它的末尾放置.name来返回“User-1-Portfolio-1-Collection-1”。

设置数据库,以便: 用户有许多投资组合和许多收藏。 投资组合属于用户,并通过连接表具有许多集合 集合属于用户,并通过连接表具有许多投资组合

希望这是有道理的。

也许有一种更简单的方法来提取我在普通哈希中的信息?

2 个答案:

答案 0 :(得分:1)

小心你的代码:

@collections = @user.collections.find_all_by_portfolio_id(1)
@collections = User.find_by_permalink(params[:id])

您在@collections中踩踏第一组返回值,并在其后面加上一行。如果其中一行应该分配给不同的实例变量,那么您正在浪费各种CPU周期并且存在潜在的错误。

答案 1 :(得分:0)

如果投资组合的值为[#<Collection id: 1, user_id: 1, portfolio_id: 1, name: "User-1-Portfolio-1-Collection-1", created_at: "2013-04-20 10:45:46", updated_at: "2013-04-20 10:45:46">]并且您希望访问它所拥有的Active Record对象的名称,那么您必须执行portfolio.first.name,因为投资组合变量是array你的情况而不是Active Record对象。

执行portfolio.first将为您提供该阵列中的第一条活动记录。

希望有所帮助。