My app has three types of profiles:
- Provider
- Professional
- & Seeker
I display these profiles with a User index page to view all profiles.
The problem i am having is that I can see all profiles on the index page but cannot access them unless signed in as that type of profile.
Professional user profiles can see all profiles but can only access professional profiles.
How can I get around this? I can see why I get a NoMethodError in Users#show error as per the below show.html.erb
code; however, I can't quite figure out how I can get around it.
Thank you in advance.
#show.html.erb
<div class="row">
<% if current_user.provider %>
<div class="col-md-3 text-center">
<%= image_tag @user.provider.avatar.url %>
</div>
<div class="col-md-6">
<h1><%= @user.provider.company_name %></h1>
<h3>Provider</h3>
<div class="well provider-description">
<h3>Description</h3>
<%= @user.provider.description %>
</div>
<div class="well provider-contact">
<h3>Contact Information</h3>
<%= @user.provider.company_number %>
<%= @user.provider.company_email %>
</div>
</div>
<% elsif current_user.professional %>
<div class="col-md-3 text-center">
<%= image_tag @user.professional.avatar.url %>
</div>
<div class="col-md-6">
<h1><%= @user.professional.first_name %> <%= @user.professional.last_name %></h1>
<h3>Professional</h3>
<div class="well professional-description">
<h3>Description</h3>
<%= @user.professional.description %>
</div>
<div class="well professional-contact">
<h3>Contact Information</h3>
<%= @user.professional.phone_number %>
<%= @user.professional.contact_email %>
</div>
</div>
<% elsif current_user.seeker %>
<div class="col-md-3 text-center">
<%= image_tag @user.seeker.avatar.url %>
</div>
<div class="col-md-6">
<h1><%= @user.seeker.first_name %> <%= @user.seeker.last_name %></h1>
<h3>Seeker</h3>
<div class="well seeker-description">
<h3>Description</h3>
<%= @user.seeker.description %>
</div>
<div class="well seeker-contact">
<h3>Contact Information</h3>
<%= @user.seeker.phone_number %><br/>
<%= @user.seeker.contact_email %><br/>
</div>
</div>
<% end %>
#index.html.erb
<div class="row">
<div class="col-md-8 col-md-offset-2">
<ul class="list-unstyled">
<% @users.each do |user| %>
<% if user.provider %>
<li>
<div class="well row <%= cycle('white-bg', '') %>">
<div class="col-sm-4 text-center">
<% if user.provider.avatar %>
<%= link_to user do %>
<%= image_tag user.provider.avatar.url(:thumb), class: 'user-index-avatar' %>
<% end %>
<% end %>
</div>
<div>
<%= link_to user do %>
<h2><%= user.provider.company_name %></h2>
<% end %>
<p><%= user.provider.description %>
</div>
</div>
</li>
<% elsif user.professional %>
<li>
<div class="well row <%= cycle('white-bg', '') %>">
<div class="col-sm-4 text-center">
<% if user.professional.avatar %>
<%= link_to user do %>
<%= image_tag user.professional.avatar.url(:thumb), class: 'user-index-avatar' %>
<% end %>
<% end %>
</div>
<div>
<%= link_to user do %>
<h2><%= user.professional.first_name %><%= user.professional.last_name %></h2>
<% end %>
<p><%= user.professional.description %>
</div>
</div>
</li>
<% elsif user.seeker %>
<li>
<div class="well row <%= cycle('white-bg', '') %>">
<div class="col-sm-4 text-center">
<% if user.seeker.avatar %>
<%= link_to user do %>
<%= image_tag user.seeker.avatar.url(:thumb), class: 'user-index-avatar' %>
<% end %>
<% end %>
</div>
<div>
<%= link_to user do %>
<h2><%= user.seeker.first_name %><%= user.seeker.last_name %></h2>
<% end %>
<p><%= user.seeker.description %>
</div>
</div>
</li>
<% end %>
<% end %>
</ul>
#users_controller
class UsersController < ApplicationController
before_action :authenticate_user!
def show
@user = User.find( params[:id] )
end
def index
@users = User.includes(:provider, :professional, :seeker)
end
end
#user.rb (model)
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_one :provider
has_one :professional
has_one :seeker
end