我认为这可能比我做的更简单......
我目前在我的控制器(用户)中有这个
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”。
设置数据库,以便: 用户有许多投资组合和许多收藏。 投资组合属于用户,并通过连接表具有许多集合 集合属于用户,并通过连接表具有许多投资组合
希望这是有道理的。
也许有一种更简单的方法来提取我在普通哈希中的信息?
答案 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
将为您提供该阵列中的第一条活动记录。
希望有所帮助。