2013-04-20 2 views
0

Я думаю, что это может быть проще, чем я делаю это ...Извлечение .name из хэше

настоящее время у меня это в моем контроллере (пользователь)

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> 
     <% ([email protected]_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">] 

поэтому я не могу просто поместить имя в конце, чтобы вернуть «User-1-Portfolio-1-Collection-1».

База данных настроена так: Пользователь имеет много портфолио и много коллекций. Портфолио принадлежит Пользователям и имеет множество коллекций через таблицу объединений Коллекция принадлежит Пользователям и имеет много портфелей через таблицу соединений

Надеюсь, это имеет смысл.

Возможно, есть более простой способ извлечения информации, которую я получаю в обычном хэше?

+0

Это не хэш в квадратных скобках, это единственный объект 'Collection' в массиве, представляющий строку, возвращаемую запросом. Объект был отображен 'inspect', чтобы вы могли видеть переменные экземпляра и их значения. –

ответ

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">] и вы хотите получить доступ названия активного объекта Record он держит, то вы должны сделать portfolio.first.name, поскольку переменная портфель является array в вашем случае и не активный объект Record.

Выполнение portfolio.first даст вам первую активную запись в этом массиве.

Надеюсь, что это поможет.

+0

Это была моя проблема! Очень признателен! – shakin8

1

Будьте осторожны с кодом:

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

Вы топать на первый набор возвращаемых значений в @collections с линией следующего за ним. Вы тратите все виды циклов процессора и имеете потенциальную ошибку, если одна из этих строк должна назначаться другой переменной экземпляра.

Смежные вопросы