2013-12-11 6 views
1

Итак, у меня есть приложение, вроде meetup.com, пользователи могут создавать события, комментировать события, искать события. Однако я бы хотел, чтобы пользователи нажимали кнопку «Посещать», а затем на странице событий/show.html.erb, которые пользователи посещают и т. д.Как добраться до RSVP до событий?

В настоящее время пользователь has_many: события и событие принадлежит _ пользователю:.

Таким образом, когда пользователь нажимает на понравившееся ему событие, он направляется на страницу events/show.html.erb. Я бы хотел, чтобы они могли видеть (количество людей, участвующих в этом событии), и иметь возможность щелкнуть по нему и посмотреть, кто именно посещает, и также иметь возможность самостоятельно нажать «Посещать мероприятие».

Как я могу это сделать?

тока show.html.erb событие

<%= render 'shared/header' %>                                 

<div class="container">                                  
    <div class="row">                                   
    <div class="span3">                                  
     <%= render 'sidebar' %>                                 
    </div>                                      
    <div class="span5">                                  
     <div class="new_event_form">                                
     <div class="line1"><h4>Create event</h4></div>                           
     <%= form_for current_user.events.new, remote: true do |f| %>                       
      <h5>Event title:</h5>                                
      <div><%= f.text_field :title, placeholder: "Event title", required: true, autocomplete: :off %></div>            
      <h5>Event description:</h5>                               
      <div><%= f.text_area :description, placeholder: "Event description", required: true, autocomplete: :off %></div>          
      <h5>Event date:</h5>                                 
      <div><%= f.text_field :date %></div>                            
      <h5>Event location:</h5>                                
      <div><%= f.text_field :location, placeholder: "Event location", required: true, autocomplete: :off %></div>           
      <div>                                    
      <%= f.submit "Create event", class: 'btn btn-primary' %>                       
      <%= link_to "Cancel", '#', class: 'btn cancel_event' %>                       
      </div><br />                                   
     <% end %>                                    
     </div>                                     
     <div class="events_list">                                
     <!-- look in events/event.hmlt.erb -->                             
     <h4><%= @event.title %> at <%= @event.location %></h4>                         
     <p><%= @event.description %></p>                              
     <h5><i class="fa fa-calendar-o"></i> <%= @event.date.strftime("%A, %B %d, %Y") %></h5>                 
     <h5><i class="fa fa-clock-o"></i> <%= @event.time %></h5>                        
     <h5><i class="fa fa-map-marker"></i> <%= @event.location %></h5>                      
     </div>                                     
     <div class="name"></div>                                 

      <%= form_for [@commentable, @comment], remote: true do |f| %> 
...........and so on... 

Благодаря передовой!

ответ

4

Существует что-то не так с вашей моделью данных. Ваши ассоциации говорят, что у пользователя много событий, но событие имеет только одного пользователя. это 1:N отношение, попробуйте изменить его M:N, с чем-то вроде этого:

class User < ActiveRecord::Base 
    has_and_belongs_to_many :events 
end 

class Event < ActiveRecord::Base 
    has_any_belongs_to_many :users 
end 

Вам нужно будет предоставить необходимые миграции для присоединения таблицы, подробнее о has_and_belongs_to_many здесь:

http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-has_and_belongs_to_many

Тогда вы сможете получить всех пользователей, посещающих конкретное событие, просто позвонив event.users и их счетчик с event.users.count.

Если вам нужно сохранить дополнительную информацию о самой связи, рассмотрите возможность использования has_many с опцией :through. Тогда код может выглядеть примерно так:

class User < ActiveRecord::Base 
    has_many :attendances 
    has_many :events, through: :attendances 
end 

class Attendance 
    belongs_to :user 
    belongs_to :event 
end 

class Event < ActiveRecord::Base 
    has_many :attendances 
    has_many :users, through: :attendances 
end 

event.users.count # => `3` for example 
+0

Большое спасибо Kreeki, что идеально. Смогу ли я просто добавить has_and_belongs_to_many: события в user.rb и добавить столбец event_id в таблицу пользователя, чтобы получить правильные результаты? –

+1

К сожалению, как работают реляционные базы данных, нет. Вам понадобится создать дополнительную таблицу в вашей базе данных под названием 'events_users' с полями' user_id' и 'event_id' (только таблица, без модели). Тогда это сработает. – Kreeki

+0

это технически has_many: через ассоциацию тогда? то есть пользователь has_many: события, через: events_users? –

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