In my rails app I can create a client and a worker for that client. Currently, I'm able to list all the workers that have been created. However, this list includes the workers for other clients too.
How do I only list all the workers for a specific client in the client show page?
I have a feeling it has to do with my client#show method.
class ClientsController < ApplicationController
before_action :set_client, only: [:show, :edit, :update, :destroy]
# GET /clients
# GET /clients.json
@clients = Client.all
# GET /clients/1
# GET /clients/1.json
@workers = Worker.all
<% @workers.each do |worker| %>
<li><%= worker.first_name %> <%= worker.client.business_name %></li>
<% end %>
show action should be showing a
Client, but your code is fetching from
Worker. You want something more like this:
def show @client = Client.includes(:workers).find(params[:id]) end # app/views/clients/show.html.erb <% @client.workers.each do |worker| %> <%= worker.name %> <% end %>
Note: it looks like you also have a
set_client method that is retriving the current
Client and setting the
@client instance variable. This is something of an antipattern; in many cases you retrieve data you don't need and make your actions harder to understand at a glance. A small amount of non-logic duplication is better than confusing abstractions!