Как получить доступ к виртуальному атрибуту из связанной модели?
У меня есть две модели, которые связаны через 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] }