2016-09-16 11 views
5

Возможно, мне не хватает чего-то фундаментального, но я не могу заставить ActiveAdmin работать с сортировкой has_many через отношения, с возможностью создания новых записей.ActiveAdmin/Formtastic sortable has_many через отношения

Итак, учитывая следующие модели

class User < ActiveRecord::Base 

    has_many :user_videos 
    has_many :videos, through: :user_videos 

    accepts_nested_attributes_for :user_videos 
    accepts_nested_attributes_for :videos 

    ... 
end 

class UserVideo < ActiveRecord::Base 

    belongs_to :user 
    belongs_to :video 

    accepts_nested_attributes_for :video 

end 

class Video < ActiveRecord::Base 

    has_many :user_videos 
    has_many :users, through: :user_videos 

    ... 
end 

(я признаю, что я бросал accepts_nested_attributes_for вокруг несколько в надежде, что что-то может работать)

И Активная настройка администратора идет что-то вроде этого (WIP конечно):

f.inputs "User" do 
    f.has_many :user_videos, heading: 'Videos', sortable: :order, allow_destroy: true, new_record: 'New Record' do |v| 
    v.inputs for: :video do |video| 
     video.input :video_url 
    end 
    end 
    f.has_many :videos, heading: 'Videos', new_record: 'New Video' do |v| 
    v.input :video_url 
    end 
end 

f.actions 

Первый has_many на :user_videos ассоциации, кажется, не делают каких-либо затрат. Если там есть записи, я вижу, что video.input :video_url фактически возвращает тег li с label и input, однако ничто не отображается на странице. Для новых записей весь бит v.inputs не запускается (мне нужно сначала создать дочерние записи?).

Второй has_many будет работать в том, что вы будете иметь возможность добавлять записи, а также обновить существующие записи, однако, невозможно разобраться, как order столбец на UserVideos модели. Я включаю это больше как иллюстрацию, чем что-либо.

Если у кого есть какие-либо указатели на это, они были бы очень признательны. :)

ответ

2

Поскольку никто не интересовался этим, я принял другой подход - вместо того, чтобы заставить ActiveAdmin/Formtastic работать с существующей структурой модели, я добавил геттеры и сеттеры для необходимого поля в модели пересечения.

class UserVideo < ActiveRecord::Base 

    belongs_to :user 
    belongs_to :video 

    validates_with VideoValidator 

    def video_url 
    self.video = Video.create if video.nil? 
    self.video.video_url 
    end 

    def video_url=(video_url) 
    self.video = Video.create if video.nil? 
    self.video.video_url = video_url 
    # Video url is set via Active Admin, AA will not call save on the video as it does not realise it's changed 
    self.video.save! if video.present? and video.valid? 
    end 

end 

Doing это означало, что вход администратору не нужно знать о модели видео, и может просто работать на модели UserVideo:

f.has_many :user_videos, heading: 'Videos', sortable: :order, allow_destroy: true, new_record: 'New Record' do |v| 
    v.input :video_url, :hint => (v.object.video.embed_code unless v.object.nil? or v.object.video.nil?) 
    end 

Если кто имеет действительное решение, а не работу вокруг , Я бы хотел это услышать, но в остальном это возможное решение для тех, кто ищет ответ на ту же проблему.

 Смежные вопросы

  • Нет связанных вопросов^_^