class PriceList < ActiveRecord::Base
has_many :prices, :dependent => :destroy
end
和价格:
class Price < ActiveRecord::Base
belongs_to :price_list
belongs_to :material
belongs_to :unit
end
现在在price_list索引中我想显示价格表名称而不是id:
<tbody>
<% @prices.each do |price| %>
<tr>
<td><%= price.price_list.price_list_short_name %></td>
<td><%= price.materials_id %></td>
<td><%= price.units_id %></td>
<td><%= link_to 'Show', price %></td>
<td><%= link_to 'Edit', edit_price_path(price) %></td>
<td><%= link_to 'Destroy', price, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
</tbody>
price.price_list.price_list_short_name
不起作用我做错了什么?
答案 0 :(得分:1)
至少有一条Price
条记录与price_list
相关联。解决方案取决于您的意图。如果您想强制所有prices
拥有price_list
,您可以添加验证:
class Price < ActiveRecord::Base
validates :price_list, presence: true
# ...
end
如果您想允许price_list-less prices
,您可以使用try
方法,这将修复视图中的错误:
price.price_list.try(:price_list_short_name)
BTW,在price_list_short_name
表中命名列price_lists
有点多余。
答案 1 :(得分:0)
我错过了正确的引用。 添加到迁移文件:
class AddReferencesToPrices < ActiveRecord::Migration
def change
remove_column :prices, :price_list_id
remove_column :prices, :materials_id
remove_column :prices, :units_id
add_reference :prices, :price_list, :index => true
add_reference :prices, :material, :index => true
add_reference :prices, :unit, :index => true
end
end
解决了问题。