Я пытаюсь создать панель мониторинга, где пользователи (модель пользователя), которые щелкнули «посещение» (которое можно пометить) на событие (модель события), которое связано с коллекцией (модель коллекции), смогут видеть для каких событий они собираются.
Мой вопрос, однако, заключается в том, как просто пройтись по всем возможным массивам, чтобы я мог получить все связанные идентификаторы для событий, которые пользователь щелкнул, «посещая».
Так, например, на моей домашней странице я хочу отобразить все возможные события, которые посещает пользователь:
user_statistics.html.erb
<div class="span3 events">
<h3>Events</h3>
<% if @events.empty? %>
<p>You are currently not attending any events.</p>
<% else %>
<p>You are attending: <b><%= pluralize(@events.count, "event") %></b></p>
<p>Event 1: <%= @event1_name %> on Date: <%= @event1.date %> at Time:<%= @event1.time %></p>
<% end %>
</div>
pages_controller.rb
def home
@title = "Title"
@user = current_user
if current_user
@post = Post.new
@feed_items = current_user.feed
@user_following = @user.following
@user_followers = @user.followers
@events = @user.flaggings.with_flag(:attending)
@event1 = Event.find(@events[0].flaggable_id)
@event1_name = Collection.find(@event1.collection_id).name
end
end
Я установил для массива @ event1 значение 0, чтобы получить доступ к первому флагу для «посещения», а затем получил flaggable_id, поэтому у меня есть идентификатор для вызова коллекции.
Моя проблема в том, что если у меня есть несколько событий, как я могу пройти по всем массивам, чтобы гарантировать, что я смогу извлечь все Коллекции?
Для первого пользователя, который нажал «посещать» 2 события, это данные:
в IRB, для User.first, кто посещает 2 события
User Load (0.3ms) SELECT "users".* FROM "users" LIMIT 1
MakeFlaggable::Flagging Load (0.4ms) SELECT "flaggings".* FROM "flaggings" WHERE
"flaggings"."flagger_id" = 1 AND "flaggings"."flagger_type" = 'User' AND
"flaggings"."flag" = 'attending'
[#<MakeFlaggable::Flagging id: 16, flaggable_type: "Event", flaggable_id: 3,
flagger_type: "User", flagger_id: 1, flag: "attending", created_at: "2012-02-20 09:26:36",
updated_at: "2012-02-20 09:26:36">, #<MakeFlaggable::Flagging id: 18, flaggable_type:
"Event", flaggable_id: 4, flagger_type: "User", flagger_id: 1, flag: "attending",
created_at: "2012-02-20 10:38:00", updated_at: "2012-02-20 10:38:00">]
Вы можете видеть, что пользователь пометил «посещение» для 2 событий, которые хранятся в массивах. Следовательно, если у меня есть 2 события, в идеале я бы хотел пройти через цикл таким образом, чтобы у меня было 2 массива.
Я нахожу это довольно запутанным для реализации этого ... любая помощь будет высоко ценится!
код user.rb
Class User < ActiveRecord::Base
attr_accessible :name, :email, :password, :password_confirmation, :user_bio,
:shop, :cover_photo, :avatar, :remote_image_url
has_secure_password
mount_uploader :cover_photo, ImageUploader
mount_uploader :avatar, ImageUploader
make_flagger
scope :shop, where(shop: true)
has_many :posts, dependent: :destroy
has_many :relationships, dependent: :destroy,
foreign_key: "follower_id"
has_many :reverse_relationships, dependent: :destroy,
foreign_key: "followed_id",
class_name: "Relationship"
has_many :following, through: :relationships, source: :followed
has_many :followers, through: :reverse_relationships, source: :follower
has_many :collections, dependent: :destroy
...
end
collection.rb частичный код
class Collection < ActiveRecord::Base
attr_accessible :name, :description, :image, :remote_image_url
belongs_to :user
has_many :products, dependent: :destroy
has_many :events, dependent: :destroy
mount_uploader :image, ImageUploader
make_flaggable :like
...
end
events.rb частичный код
class Event < ActiveRecord::Base
attr_accessible :date, :time, :description
belongs_to :collections
make_flaggable :attending
...
end