如何在模型1的show.html.erb中显示模型2的元素

时间:2015-07-24 11:03:17

标签: ruby-on-rails ruby ruby-on-rails-4

我有三个型号PriceGroup,PriceGroupLine和Item。 PriceGroup有字段 - :id和:name 项目包含字段 - :id和:name PriceGroupLine有字段 - :id,:price_group_id,:item_id,:price

社团:

PriceGroup has_many PriceGroupLines

PriceGroupLine has_many Items

PriceGroupLine belongs_to PriceGroup

我需要在PriceGroup模型的show.html.erb上显示PriceGroupLine模型的字符串。它看起来像桌子(我无法发布图片 - 低信誉(((),ITEM - 当前价格组的价格。在PriceGroup中可以有很多PriceGroupLines。它们都必须显示当前价格组。

我是Rails的新手。你能告诉我解决问题的方法

更新

我还需要从PriceGroup显示视图中插入PriceGroupLine模型行。如果我需要插入,我应该如何组织form_for helper:

  1. item_id - 使用collection_select helper
  2. 组织的项目列表
  3. price_group_id
  4. 商品价格
  5. 以下是我的PriceGroup的show.html.erb代码。在价格组中添加新项目(通过价格组行)无效。 PriceGroup的未定义方法'价格':0x007f7201dc0aa8错误

     <div class="container col-md-5">
        <h4>PriceGroup Info</h4>
        <%= link_to "Add new price group", new_price_group_path, class: "btn btn-primary btn-xs", role: "button" %>
      <%= link_to "Back", price_groups_path, class: "btn btn-primary btn-xs", role: "button" %>
        <table class="table table-hover table-condensed table-bordered">
        <tr>
            <td><strong>Price Group name</strong></td>
            <td><%= @price_group.name %></td>
        </tr>
      </table>
      <h4>Price Group Content</h4>
    
        <table class="table table-hover table-condensed table-bordered">
            <tr>
                <td><strong>Price Group Name</strong></td>
                <td><strong>Price</strong></td>
                <td><strong>Operations</strong></td>
          </tr>
            <% @price_group.price_group_lines.each do |price_group_line| %>
            <tr>
                <td><%= price_group_line.item.try(:name) %></td>
                <td><%= price_group_line.price %></td>
                    <td><%= link_to "Edit", edit_price_group_line_path(price_group_line), class: "btn btn-primary btn-xs", role: "button" %> | <%= link_to "Delete", price_group_line_path(price_group_line), method: :delete, data: { confirm: "Sure?" }, class: "btn btn-primary btn-xs", role: "button" %></td>
                </tr>
          <% end %>
        </table>  
    </div>
    <div class="container col-md-10">
      <h4>Add new item to PeiceGroup</h4>
      <%= form_for @price_group, html: {class: "form-inline"} do |f| %>
            <div class="form-group">
            <label>Item</label>
                <%= f.collection_select(:id, Item.all, :id, :name, {}, {class: "form-control"}) %>
            </div> 
            <div class="form-group">
                <label>Price</label>
                <%= f.text_field :price, class: "form-control" %>
            </div>
            <%= f.submit "Add item", class: "btn btn-default" %>
        <% end %>
    </div>
    

1 个答案:

答案 0 :(得分:0)

假设您有一个变量,其pricegroup对象名为@price_group。所以在视图中你可以做的是:

<% @price_group.price_group_lines.each do |price_group_line| %>
  <%= price_group_line.name %> #or anything you want to do
  <%= price_group_line.item.name %> #for the item name
<% end %>

假设您需要来自price_group_line的单个属性的逗号分隔值,那么您也可以这样做:

<%= @price_group.price_group_lines.map(&:name).join(', ') %>

这将为您提供逗号分隔的所有名称。

正如Glupo建议您可以像这样急切加载以避免视图上的数据库请求。所以在你的控制器动作中:

@price_group = PriceGroup.find(params[:id]).include(:price_group_lines)

希望这有帮助。