Привет, у меня есть модель постов и модель коллекций, объединенная моделью коллекций. Когда пользователь создает сообщение, он добавляет сообщение в коллекцию, например «музыка». Однако, когда я перечисляю все коллекции пользователя, для каждого поста создается несколько записей «музыка» вместо 1.
Я собираю коллекции с помощью @collections = @ user.posts.map (&: collection) .flatten, если я добавлю .uniq в конце, не получаю дубликатов (@collections = @ user.posts.map (&: Collection ) .flatten.uniq) Но кто-нибудь может объяснить, почему я должен это делать ??? Большое спасибо.
UsersController
def show
@user = User.find(params[:id]) rescue nil
@posts = @user.posts.paginate(:per_page => "10",:page => params[:page])
@title = @user.name
@collections = @user.posts.map(&:collections).flatten
end
просмотров / пользователей / show.html.erb
<h1>Collections</h1>
<% @collections.each do |collection| %>
<%= link_to collection.name, user_collection_posts_path(@user, link_name(collection)) %><br />
<% end %>
коллекция модели
class Collection < ActiveRecord::Base
mount_uploader :image, CollectionUploader
attr_accessible :name, :image, :user_id
has_many :collectionships
has_many :users, :through => :posts
has_many :posts, :through => :collectionships
end
коллекционная модель
class Collectionship < ActiveRecord::Base
belongs_to :post
belongs_to :collection
has_one :user, :through => :post
attr_accessible :post_id, :collection_id
end
пост модель
belongs_to :user
has_many :collectionships
has_many :collections, :through => :collectionships
пользователь mdoel
has_many :posts, :dependent => :destroy
has_many :collections, :through => :posts