0

My App allows a user to create an Event and people can RSVP to the event. The app worked well before adding the Friendly_id gem, it works well as far as creating a new Event, but the RSVPs do not work as when you click submit you get an error. Please look at my code and see if there is anything that I am missing. Thank you in advance.

Event Model

 class Event < ApplicationRecord
 extend FriendlyId
 friendly_id :eventname, use: [:slugged, :finders]
   belongs_to :user


def should_generate_new_friendly_id?
    eventname_changed?
end
   has_attached_file :image, styles: { medium: "300x300>", thumb:   "100x100>" }, default_url: "/images/:style/placeholder.png"
   validates_attachment_content_type :image, content_type: /\Aimage\/.*\z/
   validates :eventname, presence: true
   has_many :rsvps, dependent: :destroy
end'

Rsvp Model

class Rsvp < ApplicationRecord
    extend FriendlyId
    friendly_id :eventname, use: [:slugged, :finders]
    belongs_to :event
end

Events Controller

class EventsController < ApplicationController
before_filter :authenticate_user!, except: [:show]

def index
    @events = current_user.events.all
end

def show
    @event = Event.friendly.find(params[:id])
end

def new
    @event = current_user.events.build
end

def create
    @event = current_user.events.build(event_params)
    @event.user = current_user
    respond_to do |format|
        if @event.save
            format.html { redirect_to @event, notice: "Successfully created" }
        else
            format.html { render "new" }
        end
    end
end

def edit
    @event = Event.friendly.find(params[:id])
end

def update
    @event = Event.friendly.find(params[:id])
    if @event.update(event_params)
        redirect_to @event
    else
        render 'edit'
    end
end

def destroy
    @event = Event.friendly.find(params[:id])
    @event.destroy

    redirect_to events_path
end

private

 def event_params
  params.require(:event).permit(:eventname, :date, :time, :venue,   :description, :image)
end

end

Rsvp Controller

class RsvpsController < ApplicationController

def index
    event = Event.friendly.find(params[:event_id])
    @rsvps = event.rsvps
end

def new
    event = Event.friendly.find(params[:event_id])
    @rsvp = event.rsvps.friendly.build
        respond_to do |format|
            format.html
        end
end

def create
    event = Event.friendly.find(params[:event_id])
    @rsvp = event.rsvps.build(rsvp_params)
    respond_to do |format|
        if @rsvp.save
        format.html { redirect_to "/thanks" }
        format.js
        else
        format.html { render :new }
        format.js
        end
    end
end

def thanks
    render params[:page]
end

 private
    def rsvp_params
    params.require(:rsvp).permit(:status, :name, :message)
    end

 end

Routes

  resources :events do
   resources :rsvps
  end

show event:

http://127.0.0.1:3000/events/birthday

create rsvp for event:

 http://127.0.0.1:3000/events/3/rsvps/new

After submit error shows on:

http://127.0.0.1:3000/events/birthday/rsvps

Screenshot of Error I get

Morez SA
  • 87
  • 7

1 Answers1

0

I managed to resolve this issue by updating the following:

class Rsvp < ApplicationRecord
   belongs_to :event
end

changed this:

new_event_rsvp_path(event_id: @event.id)

to this:

new_event_rsvp_path(@event)

Creating new RSVP now shows in the Friendly_id way:

 http://127.0.0.1:3000/events/birthday/rsvps/new
Morez SA
  • 87
  • 7