从rails中的视图访问外部表的数据

时间:2014-10-31 18:13:26

标签: ruby-on-rails ruby models

我正在创建一个库存应用,其中“分配”是向所有者发布商品。

在我的distribution.index页面上,我无法确定如何显示发行版所有者的名字(见下文):

 <% @distribution.each do |distribution| %>
    <tr>
    <td><%= distribution.id %></td>

    <td><%= (@owner[(distribution.owner_id)]).name %></td>

    <td><%= distribution.issued %></td>
    <td><%= distribution.returned %></td>

 </tr>
 <% end %>

错误是:nil的未定义方法`name':NilClass

据我所知,distribution.owner_id不能解析为允许我找到正确所有者的整数。

控制器:

def index
@distribution = Distribution.all

@item = Item.all

@owner = Owner.all
end

模型:

 class Distribution < ActiveRecord::Base
 has_one :owner, :class_name => 'Owner', :foreign_key => 'owner_id'
 has_one :item, :class_name => 'Item', :foreign_key => 'item_id'
 has_one :type, :class_name => 'Type', :foreign_key => 'type_id'
 has_one :location, :class_name => 'Location', :foreign_key => 'location_id'
 end

class Owner < ActiveRecord::Base
belongs_to :distribution, :class_name => 'Distribution', :foreign_key => 'owner_id'
end

我的架构设置错误了吗?:

ActiveRecord::Schema.define(version: 20141030135155) do

create_table "distributions", force: true do |t|
t.integer  "item_id"
t.integer  "type_id"
t.integer  "location_id"
t.integer  "owner_id"
t.date     "issued"
t.date     "returned"
t.datetime "created_at"
t.datetime "updated_at"
end


create_table "owners", force: true do |t|
t.string   "first"
t.string   "last"
t.string   "dept"
t.datetime "created_at"
t.datetime "updated_at"
end

2 个答案:

答案 0 :(得分:0)

由于您已经建立了所有关系,请尝试这样做: -

<td><%= distribution.owner.name %></td>

答案 1 :(得分:0)

如果分发可以拥有或不拥有,请使用此:

<td><%= distribution.owner.try(:name) %></td>

我建议改变你的索引动作,这样:

def index
  @ditributions = Distribution.includes(:owner, :item)
end

这可以很好地进行分页并优化数据库调用。

模型分布必须belongs_to :ownerbelongs_to :item,因为字段owner_id和item_id的存在。更多信息here