Rails的新手并尝试测试我拥有的关联。我有三个相互关联的模型:Animal,Order和Line。基本上,行属于Orders属于Animal。我希望动物展示页面列出与该动物相关的所有订单以及与该订单相关联的行(目前为单数)。
以下是模型文件。
animal.rb:
class Animal < ActiveRecord::Base
attr_accessible :breed, :photo, :animal_type
has_many :orders
end
line.rb
class Line < ActiveRecord::Base
belongs_to :order
attr_accessible :notes, :units
end
order.rb
class Order < ActiveRecord::Base
belongs_to :animal
attr_accessible :status, :lines_attributes, :animal_id
has_many :lines
accepts_nested_attributes_for :lines
end
我要做的是在动物秀视图中显示与给定动物相关的所有行和命令。这是我的节目视图
<p id="notice"><%= notice %></p>
<div class="pull-left">
<h2><span style="font-size:80%"> Animal Name: </span><%= @animal.name %></h2>
</div>
<br>
<table class="table">
<tr>
<th>Type of Animal</th>
<th>Breed</th>
<th>Photo</th>
</tr>
<tr>
<td><%= @animal.animal_type %></td>
<td><%= @animal.breed %></td>
<td><%= @animal.photo %></td>
</tr>
</table>
<br>
<h2>Associated Orders</h2>
<table class="table">
<tr>
<th>Order Number</th>
<th>Order Status</th>
<th>Line Notes</th>
<th>Line Units</th>
<tr>
<%= render 'orderlist' %>
</table>
<br>
<%= link_to 'Edit', edit_animal_path(@animal) %> |
<%= link_to 'Back', animals_path %>
最后,这是订单列表帮助
<% @animal.orders.each do |o| %>
<tr>
<th><%= o.id %></th>
<th><%= o.status %></th>
<th><%= o.lines.notes %></th>
<th><%= o.lines.units %></th>
</tr>
<%end%>
但是,当我访问节目页面时,这会引发错误,说
undefined method `notes' for #<ActiveRecord::Relation:0x007f9259c5da80>
如果我删除.notes,那么它对单位说的是相同的。如果我删除两个(并保留o.lines),页面加载就好了,并在这两个表格单元格中列出相关行的所有信息(行ID,行单元,行注释)。所以它肯定找到了正确的模型对象,但它并没有让我调用特定的属性。
知道我做错了什么吗?难住了。谢谢!
答案 0 :(得分:1)
您在与订单关联的行的
<% @animal.orders.each do |o| %>
<tr>
<th><%= o.id %></th>
<th><%= o.status %></th>
<th><%= o.lines.map(&:notes).join('. ') %></th>
<th><%= o.lines.map(&:units).join('. ') %></th>
</tr>
<% end %>