Reputation: 59
I have 3 models:
class User < ActiveRecord::Base
has_many :user_leave_portfolios
has_many :leave_portfolios, :through => :user_leave_portfolios
end
class LeavePortfolio < ActiveRecord::Base
has_many :user_leave_portfolios, dependent: :destroy
has_many :users, :through => :user_leave_portfolios
end
class UserLeavePortfolio < ActiveRecord::Base
belongs_to :user
belongs_to :leave_portfolio
# this table has an additional field named 'leave_amount'
end
The 'leave_amount' field on the user_leave_portfolio table is used as a user chosen leave amount based on a leave_portfolio
According to documentation and various other blogs and articles, I should be able to access the 'leave amount' field with:
u = User.first
u.leave_portfolios.first.leave_amount
However, I get the following error:
NoMethodError: undefined method `leave_amount' for #LeavePortfolio:0x007f8708e3dbe0
Schema:
create_table "leave_portfolios", force: :cascade do |t|
t.string "name", limit: 255
t.integer "calculation_type", limit: 4
t.integer "period", limit: 4
t.integer "default_amount", limit: 4
t.integer "organisation_id", limit: 4
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "user_leave_portfolios", force: :cascade do |t|
t.integer "leave_portfolio_id", limit: 4
t.integer "user_id", limit: 4
t.float "leave_amount", limit: 24
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "users", force: :cascade do |t|
t.string "email", limit: 255, default: "", null: false
t.string "encrypted_password",
.
.
.
end
Upvotes: 1
Views: 637
Reputation: 33542
You should do
u = User.first
u.user_leave_portfolios.first.leave_amount
as you have leave_amount
in user_leave_portfolios
not in leave_portfolios
.
Upvotes: 1