我不知道问题的标题是否正确。
我有位置,硬件和hardware_type表,但没有嵌套路由。 我已经建立了关系,以便位置具有硬件和硬件属于hardware_categories以及互惠关系。
在我的位置控制器中的show动作
class LocationsController < ApplicationController
before_action :set_location, only: [:show, :edit, :update, :destroy]
# GET /locations
# GET /locations.json
def index
@locations = Location.all
end
# GET /locations/1
# GET /locations/1.json
def show
@hardwares = Hardware.where(:location_id => params[:id])
end
并在我的展示页面
<% @hardwares.each do |hardware| %>
<tr>
<td><%= hardware.name %></td>
<td><%= hardware.asset_tag %></td>
<td><%= hardware.serial_number %></td>
<td><%= hardware.note %></td>
<td><%= hardware.hardware_category_id %></td>
</tr>
<% end %>
这有效,而hardware.hardware_category_id返回正确的数字。
我想显示hardware_category的名称
我想像
<td><%= hardware.hardware_category_id.name %></td>
可以工作,但我得到1的未定义方法`name':Fixnum如何才能访问这些数据
schema`create_table“hardware_categories”,force:true do | t | t.string“name” t.datetime“created_at” t.datetime“updated_at” 端
create_table“hardwares”,force:true do | t | t.string“name” t.string“asset_tag” t.string“serial_number” t.text“description” t.text“note” t.string“成本” t.date“purchase_date” t.date“warranty_end_date” t.date“eol” t.datetime“created_at” t.datetime“updated_at” t.string“mdl” t.integer“location_id” t.integer“hardware_category_id” t.integer“manufacturer_id” t.integer“supplier_id” end`
答案 0 :(得分:1)
<%= hardware.hardware_category.name %>
你需要的是什么。
不需要_id
。关联的名称与您在模型中定义的名称相同。我假设它像:
belongs_to :hardware_category
我建议您在尝试执行更多操作之前阅读本指南。 http://guides.rubyonrails.org/association_basics.html
您看到该错误的原因是因为hardware_category_id
正是如此,整数(FixNum)和FixNum类没有名为name
的方法/属性。< / p>
-
Rich Peck编辑
更好的方法是使用.try
评估相应的hardware_category
是否存在...
<%= hardware.hardware_category.try(:name) %>
...这会阻止任何&#34;未找到&#34;如果相应的对象不存在则会出错。
答案 1 :(得分:0)
hardware.hardware_category_id.name
找到hardware_category_id
,然后找到该ID的名称。
在这种情况下hardware.hardware_category_id == 1
。
因此,您正在调用1.name
并且1是一个fixnum,并且没有方法名称,您将获得name
的未定义方法1:Fixnum error
。
您可以在名为hardware_category_name
的硬件中创建新字段,然后调用hardware.hardware_category_name
。