2015-12-10 5 views
1

У меня есть галерея с моделью album.Проверьте, есть ли у пользователя объект

Я хотел бы сохранить, когда пользователь смотрит на альбом, чтобы иметь возможность фильтровать альбомы, которые пользователь не видел.

Как бы вы это сформулировали?

Создайте UserView, который сгенерирован и сохранен на каждом первом представлении, это первое, о чем я могу думать - но это похоже на много данных для сохранения.

ответ

1

Нет, это не так много данных, поскольку вы должны хранить только user_id и album_id. Вот пример, который позволяет хранить соответствующие данные. Он также гарантирует уникальность данных, которые вы пытаетесь сохранить.

class AlbumView < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :album 

    validates :user_id, presence: true, uniqueness: { scope: [:album_id] } 
end 

class User < ActiveRecord::Base 
    has_one :album_view 
end 

# Won't fail if view already exists 
AlbumView.create({ 
    user: current_user, 
    album: album 
}) 
+0

has_one: album_view, почему только один? – davidwessman

1

Я думаю, что у вас есть правильная идея. Модель Album может has_many :album_views. Тогда ваша модель User должна иметь has_many :album_views.

Тогда в модели AlbumView, установите belongs_to :album и создать миграцию:

def change 
    create_table :album_view do |t| 
    t.integer :album_id 
    t.integer :user_id 

    t.timestamps null: false 
    end 
end 

Таким образом, когда пользователь просматривает альбом, установить контроллер для вызова метода пользовательского FindOrCreate, который будет найти album_view, если она существует этого пользователя и альбома, или создать его.

Может показаться, что вы можете создать объект для каждого вида, но данные дешевые. :)

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