我在GIThub上找到了这个迷你应用程序,允许用户在这里创建出席和取消事件:https://github.com/ghembo/private-events唯一的问题是它是为Rails 3制作的。我正在尝试将该应用程序实现到我自己的应用程序中练习应用程序,但使用rails 4.2.4到目前为止我遇到了参加活动功能的问题。
我有三个使用富连接连接的模型,有很多通过:user,event和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 :(得分:0)
您需要进行创建操作,并且需要将Flash操作从新操作移动到创建中。
您的创建操作应该类似于此
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