active_admin - отображать список элементов, принадлежащих другому элементу - PullRequest
5 голосов
/ 01 апреля 2012

Я пытаюсь как-то отобразить line items для order в active_admin order show page, не повезло ..

вот отношения между моделями:

order.rb

class Order < ActiveRecord::Base
  has_many :line_items, :dependent => :destroy
  # ...
  validates :name, :address, :email, :presence => true
  validates :pay_type, :inclusion => PAYMENT_TYPES
end

line_item.rb

class LineItem < ActiveRecord::Base
  belongs_to :order
  belongs_to :product
  belongs_to :cart

  def total_price
    product.price * quantity
  end

end

active_admin order.rb

ActiveAdmin.register Order do

  show do
    attributes_table :name, :email, :address, :pay_type, :created_at, :updated_at
  end
end

active_admin line_item.rb

class LineItem < ActiveRecord::Base
  belongs_to :order
  belongs_to :product
  belongs_to :cart

  def total_price
    product.price * quantity
  end

end

когда я нажимаю показать порядок, он должен отображать элементы для этого порядка. В файле шоу приложения я сделал это с

<%= render @order.line_items %>

_line_items.html.erb

<!-- START_HIGHLIGHT -->
<% if line_item == @current_item %>
    <tr id="current_item">
  <% else %>
<tr>
<% end %>
<!-- END_HIGHLIGHT -->
  <td><%= line_item.quantity %>&times;</td>
  <td><%= line_item.product.title %></td>
  <td class="item_price"><%= number_to_currency(line_item.total_price) %></td>
</tr>

и элементы находятся на странице, но в Active_Admin я не знаю, как заставить это работать .. Пожалуйста, помогите. Спасибо за ваше время.

решаемые

Благодаря bruno077 мне удалось наконец получить line_items в порядке show_page в ActiveAdmin

 show do |order|

  panel "Customer details" do
    attributes_table_for order, :first_name, :last_name, :card_type, :created_at, :ip_address
  end

  panel("Products for this order") do
    table_for(order.line_items) do
      column "Product" do |item| 
        item.product.title
      end
      column "Price" do |item| 
        item.product.price
      end
      column "Quantity" do |item| 
        item.quantity
      end
    end
  end
end

Я получил идентификатор продукта на данный момент, но он не далеко отсюда, чтобы получить то, что я хочу. Ура!

1 Ответ

10 голосов
/ 02 апреля 2012

Примерно так может работать:

ActiveAdmin.register Order do
  show do |order|
    div do      
      panel("Items") do
        table_for(order.line_items) do
          column :quantity
          column "Title" do |i| 
            i.product.title
          end
          column "Price" do |i| 
            number_to_current(i.total_price)
          end
        end
      end
    end
  end
end

Еще один не связанный пример, который может дать вам подсказку:

  # => Show
  show :title => :date do |gallery|
    panel "Galería" do
      attributes_table_for gallery, :name, :description, :date
    end

    panel "Fotos" do
      table_for(gallery.gallery_files) do
        column "Título", :title
        column "Fecha", :date
        column "Foto" do |image|
          image_tag image.file.url(:thumb).to_s
        end
      end
    end

  end
...