Вести порядок сохраненных списков атрибутов для модели

У меня есть две модели с отношением has_many к has_many через таблицу соединений.

class Article < ActiveRecord::Base
    has_many :authorings, -> { order(:position) }, :dependent => :destroy
    has_many :authors, through: :authorings
end

class Author < ActiveRecord::Base
    has_many :authorings, -> { order(:position) }
    has_many :articles, through: :authorings
end

class Authoring < ActiveRecord::Base
  belongs_to :author
  belongs_to :article
  acts_as_list :scope => :author
end

Методы получения и установки для массива

def author_list
    self.authors.collect do |author|
        author.name
    end.join(', ')
end

def author_list=(author_array)
    author_names = author_array.collect { |i| 
        i.strip.split.each do |j|
            j.capitalize
        end.join(' ') }.uniq
    new_or_found_authors = author_names.collect { |name| Author.find_or_create_by(name: name) }
    self.authors = new_or_found_authors
end

Я хочу сохранить порядок списка авторов, которые будут сохранены в модели. То есть я хотел бы иметь возможность изменить и изменить порядок author_list и получить его в таком порядке для представления. Я хочу изменить его ['foo','bar'] или ['bar','foo']. Как я могу это сделать?

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

1 ответ

Вы должны иметь атрибут позиции для каждого автора.

Затем вы можете сгенерировать отсортированный массив activerecord и получить атрибут name

authorlist = Author.order(:position).pluck(:name)

Я не вижу, как вы меняете атрибут позиции, я предполагаю, что для этого вам нужны какие-то js на внешнем интерфейсе.

Другие вопросы по тегам