0

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

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

  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”。

数据库的设置是这样的: 一个用户有许多投资组合和许多收藏。一个投资组合属于用户,通过一个连接表有很多收藏 一个收藏属于用户,通过一个连接表有很多投资组合

希望这是有道理的。

也许有一种更简单的方法可以在普通哈希中提取我所追求的信息?

4

2 回答 2

1

小心你的代码:

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

你在你的第一组返回值上@collections加上它后面的行。如果这些行之一应该分配给不同的实例变量,那么您正在浪费各种 CPU 周期并且有一个潜在的错误。

于 2013-04-20T14:54:49.247 回答
0

如果portfolio 的值是[#<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因为portfolio 变量array在您的情况下是一个而不是Active Record 对象。

这样做portfolio.first将为您提供该数组中的第一个活动记录。

希望有帮助。

于 2013-04-20T13:24:26.917 回答