0

Я нашел это мини-приложение на GIThub, которое позволяет пользователям создавать события присутствия и отмены здесь: https://github.com/ghembo/private-events Единственная проблема в том, что он был создан для Rails 3. Я пытаюсь реализовать это приложение в моем собственном приложении практики, но с использованием рельсов 4.2.4 до сих пор у меня возникают проблемы с функциональностью событий посещений.Rails 4 Разрешить пользователям создавать и участвовать в событиях

У меня есть три модели, которые связаны с использованием богатого соединения, используя множество функций: пользователя, события и event_registration.

user.rb 

class User < ActiveRecord::Base 
has_many :event_registrations 
has_many :events, through: :event_registrations 

.

event.rb 
class Event < ActiveRecord::Base 
has_many :event_registrations 
has_many :users, through: :event_registrations 

.

event_registration.rb 
class EventRegistration < ActiveRecord::Base 
belongs_to :event 
belongs_to :user 

Функциональность, которая создает новое событие находится в пределах event_registrations_controller.rb

class EventRegistrationsController < ApplicationController 

def new 
    EventRegistration.new(event_id: params[:event_id].to_i, user_id: 
    current_user.id) 
    redirect_to event_path(params[:event_id]) 
    flash[:notice] = "Thanks for attending this event!" 
end 

def destroy 
    EventRegistration.where(event_id: params[:event_id].to_i, user_id: 
    current_user.id).first.destroy 
    redirect_to event_path(params[:event_id]) 
end 


private 
# Use callbacks to share common setup or constraints between actions. 
def set_event_registration 
    @event_registration = EventRegistration.find(params[:id]) 
end 

def event_registration_params 
    params.require(:event_registration).permit(:user_id, :event_id) 
end 
end 

Это фрагмент из моих событий \ show.html.erb, что создает событие.

<% if session[:user_id] %> 
    <% if @event.attended_by(User.find(session[:user_id])) %> 
    <%= link_to "Cancel attendance", event_registration_path(event_id: 
    @event.id), method: :delete, class: "btn 
    btn-primary" %> 
    <% else %> 
    <%= link_to "Attend", new_event_registration_path(event_id: @event.id), 
    class: "btn btn-success" %> 
    <% end %> 
<% end %> 

Проблема в том, что я получаю «Спасибо за участие в этом мероприятии!». но никакой новой записи в таблице event_registrations не будет.

Заранее благодарю вас за помощь.

+0

Вы должны иметь создать действие и удалить flash_notice под новое действие. Вот почему вы получаете сообщение о успехе, но не сохраняете. – nil

+0

Оригинальный автор сказал об этом: «Приложение Rails для обучения ассоциациям». Так что это, вероятно, более экспериментально. Я советую не использовать его в качестве базы для вашей собственной системы. – Meier

+0

Спасибо @Meier, но я сам просто занимаюсь рельсами, чтобы это вообще не входило в производство. – Zero

ответ

0

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

Ваше создать действие должно выглядеть как этот

def new 
    @event_registration = EventRegistration.new 
end 

def create 
@event_registration = current_user.events.build(event_registration_params) 
    if @event_registration.save 
    flash[:notice] = 'Event registration created' 
    redirect_to events_path 
    else 
    flash.now[:warning] = 'There were problems when trying to create a new event registration' 
    render :action => :new 
    end 
end 
+0

Спасибо @Russell, к сожалению, контроллер event_registrations не имеет никакого представления, поэтому я получаю Missing Template ошибка. Регистрация новых событий производится непосредственно со страницы show events (events \ show.html.erb), когда пользователь нажимает ссылку Attend. Поскольку event_registrations - это всего лишь совместная таблица, я полагал, что ей не нужно иметь никаких просмотров, поскольку она просто предоставляет пользователям возможность посещать события. – Zero

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