I don't know if the title of the question is correct.
I have locations, hardware, and hardware_type tables but no nested routes.
I have set up the relationships so that location has_many hardwares and hardware belongs_to hardware_categories along with the reciprocal relationships.
In my locations controller in the show action I have
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
And in my show page
<% @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 %>
This works and the hardware.hardware_category_id returns the correct number.
I would like to show the name of the hardware_category instead
I thought something like
<td><%= hardware.hardware_category_id.name %></td>
would work but I get undefined method 'name' for 1:Fixnum
How would I get access to this data
schema
create_table "hardware_categories", force: true do |t|
t.string "name"
t.datetime "created_at"
t.datetime "updated_at"
end
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 "cost"
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
<%= hardware.hardware_category.name %> Is what you need.
No need for the _id. The name of the association is as you defined it in the model. I assume its something like:
belongs_to :hardware_category
I recommend reading this guide, before you try doing much more rails. http://guides.rubyonrails.org/association_basics.html
The reason you are seeing that error, is because the hardware_category_id is exactly that, an Integer(FixNum) and the FixNum class doesn't have a method/attribute called name.
--
Rich Peck edit
A better way to do this will be to use .try to evaluate whether the corresponding hardware_category exists...
<%= hardware.hardware_category.try(:name) %>
... this will prevent any "not found" errors if the corresponding object is non existent.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With