Как получить доступ к виртуальному атрибуту из связанной модели? - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть две модели, которые связаны через отношения 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 ]

0 голосов
/ 04 февраля 2019

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

User.all.map { |x| [x.full_name, x.id] }
0 голосов
/ 04 февраля 2019

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

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

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

...