Ruby on rails 访问/输出扁平散列中的值?

Ruby on rails 访问/输出扁平散列中的值?,ruby-on-rails,ruby,hash,Ruby On Rails,Ruby,Hash,在我的控制器中,我有: @invoices = current_user.account.clients.map(&:invoices).flatten 在我的index.html.erb中,我想显示这些值,目前我有以下内容: <% @invoices.each do |invoice| %> <tr> <td></td> <td><%= invoice.client.name %

在我的控制器中,我有:

@invoices = current_user.account.clients.map(&:invoices).flatten
在我的index.html.erb中,我想显示这些值,目前我有以下内容:

<% @invoices.each do |invoice| %>
    <tr>
        <td></td>
        <td><%= invoice.client.name %></td>
        <td><%= invoice.jobs.inspect %></td> #HERE IS WHERE I WANT START_DATE, etc
        <td><%= invoice.created_at %></td>
        <td><%= link_to "PDF", invoice_path(invoice, :format => :pdf)%></td>
        <td><%= link_to invoice, :method => :delete, :confirm => 'Are you sure you want to delete this invoice' do %> <i class="icon-trash"></i><% end %>
    </td>
    </tr>
  <% end %>
[#<Job id: 15, start_date: "2012-03-24", due_date: "2012-03-31", notes: "grthryrth", audio_file_url: "1.txt", transcribed_file_url: "300.txt", status: "invoiced", account_id: 1, user_id: 1, client_id: 2, created_at: "2012-03-29 18:03:14", updated_at: "2012-03-29 18:40:49", invoice_id: 6>, #<Job id: 16, start_date: "2012-03-24", due_date: "2012-03-21", notes: "uopuiouioiio", audio_file_url: "Data Flow Analysis and Integration v1.1.docx", transcribed_file_url: "ECA-Sponsor Monthly Agenda 20120105.doc", status: "invoiced", account_id: 1, user_id: 4, client_id: 2, created_at: "2012-03-29 18:05:24", updated_at: "2012-03-29 18:40:49", invoice_id: 6>]

#这是我想要的开始日期等
:pdf)%>
:delete,:confirm=>'是否确实要删除此发票'do%>
invoice.jobs.inspect返回以下内容:

<% @invoices.each do |invoice| %>
    <tr>
        <td></td>
        <td><%= invoice.client.name %></td>
        <td><%= invoice.jobs.inspect %></td> #HERE IS WHERE I WANT START_DATE, etc
        <td><%= invoice.created_at %></td>
        <td><%= link_to "PDF", invoice_path(invoice, :format => :pdf)%></td>
        <td><%= link_to invoice, :method => :delete, :confirm => 'Are you sure you want to delete this invoice' do %> <i class="icon-trash"></i><% end %>
    </td>
    </tr>
  <% end %>
[#<Job id: 15, start_date: "2012-03-24", due_date: "2012-03-31", notes: "grthryrth", audio_file_url: "1.txt", transcribed_file_url: "300.txt", status: "invoiced", account_id: 1, user_id: 1, client_id: 2, created_at: "2012-03-29 18:03:14", updated_at: "2012-03-29 18:40:49", invoice_id: 6>, #<Job id: 16, start_date: "2012-03-24", due_date: "2012-03-21", notes: "uopuiouioiio", audio_file_url: "Data Flow Analysis and Integration v1.1.docx", transcribed_file_url: "ECA-Sponsor Monthly Agenda 20120105.doc", status: "invoiced", account_id: 1, user_id: 4, client_id: 2, created_at: "2012-03-29 18:05:24", updated_at: "2012-03-29 18:40:49", invoice_id: 6>]
[#,#]

如何单独访问每个值,例如invoice.jobs.start\u date?谢谢

方法不止一种:如果你不想搞砸
inspect
,你可以在你的作业模型中覆盖
inspect
,创建另一种方法(比如
pretty\u display
,随便什么),或者使用视图助手(比如
job\u pretty\u display(作业)
)。我会选择第三个选项。

如果你想获得发票,那么在我看来,浏览用户模型似乎有些倒退。考虑一下这样的事情:

@invoices = Invoice.joins( :client => { :accounts => :user } ).
                    include( :client, :jobs ).
                    where( "accounts.user_id" => current_user.id ).
                    all
但是,无论哪种方式,如果
invoice.jobs
是一个数组(其复数形式及其
inspect
输出中的方括号证明了这一点),则首先需要使用
[0]
first
访问数组的一个元素:

invoice.jobs.first.start_date
# => "2012-03-24"

谢谢因此,如果我在发票中有多个作业,我将如何显示这些作业?通过使用invoice.jobs[0]。开始日期显然只返回第一个jobs项的值,而不返回后续项的值。在这种情况下,您将循环遍历集合,例如,
invoice.jobs.each do | job |……
或。后者可能更“粗鲁”。