Ответ от @Alec почти наверняка приведет к синтаксической ошибке, блок не может логически оценить это выражение.
Вы можете добиться этого следующим образом:
class User < ApplicationRecord
has_many :user_skills
has_many :skills, through: :user_skills
has_many :primary_user_skills, -> { where(primary: true) }, class_name: 'UserSkill'
# Above cannot be has_one, we are creating intermediate relationship from user_skills where primary is true.
def primary_skill
primary_user_skills.first.try(:skill)
end
end
Редактировать - упрощенная версия для того же может быть ниже:
class User < ApplicationRecord
has_many :user_skills
has_many :skills, through: :user_skills
def primary_skill
skills.find_by(user_skills: {primary: true})
end
end