Как получить доступ к виртуальному атрибуту из связанной модели?

У меня есть две модели, которые связаны через has_and_belongs_to_many отношения.

Я создал виртуальный атрибут :full_name от первой модели (User) :first_name а также :last_name атрибутов.

Я использую ActiveAdmin и пытаюсь показать :full_name атрибут в форме ActiveAdmin соответствующей модели.

Я проверил в консоли Rails и обнаружил, что @user.full_name существует.

В модели User я определил full_name используя информацию, которую я нашел здесь и здесь.

Ниже приведен код модели и связанной с ней модели (Group) страница admin/group.rb.

# user.rb
def full_name
  [first_name, last_name].join(' ')
end

def full_name=(name)
  split = name.split(' ', 2)
  self.first_name = split.first
  self.last_name = split.last
end

# admin/group.rb 
form do |f|     
  f.inputs 'Details' do
    f.input :description
    f.input :users, as: :check_boxes, collection: User.pluck(:full_name, :id)
    f.submit
  end
end

Я надеюсь просмотреть полное имя из атрибутов first_name а также last_name,

С моим кодом, как есть, каждый пользователь, который появляется в форме, помечен как "полное имя".

2 ответа

Решение

pluck захватывает столбец прямо из базы данных. Вы получаете эту ошибку, так как ваш full_name Метод не является столбцом базы данных.

+ Изменить User.pluck(:full_name, :id) в

User.select(:id, :first_name, :last_name).all.map{|u| [u.full_name, u.id] }

Вы можете получить доступ вы full_name метод экземпляра путем отображения, как это

User.all.map { |x| [x.full_name, x.id] }
Другие вопросы по тегам