Reputation: 63
I have two models in a has_many relationship:
(has_many :vacations)
(belongs_to: user)
I am trying to display a User's credits attribute in the Vacation index view. How do I go about it?
I have tried:
<%= vacation.user.credits %>
, however, I am getting an error.
What are the right steps in doing so? Does it have anything to do with the Action Controller Parameters?
User 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_many :vacations
end
Vacation Model
class Vacation < ActiveRecord::Base
belongs_to :user
before_validation :calculate_days
def calculate_days
if from_date && to_date
self.leave_credit = from_date.business_days_until(to_date) + 1
end
end
end
Upvotes: 0
Views: 116
Reputation: 190
One approach could be using the current_user
method, since you're already using devise. This would work only if credits have to be displayed only to the currently logged in user, say in the dashboard. try using <%= current_user.credits %>
You could also try
class VacationsController < ApplicationController
def index
@user = User.find(params[:user_id])
@credits = @user.credits
end
end
Another one line approach could be
@credits = User.find(params[:user_id]).credits
Upvotes: 1