passing multiple parameters into route helpers link

36 Views Asked by At

I am new to Rails. I am trying to build a website. Below is my data models:

- user: 
has_many :created_events, foreign_key: "creator_id", class_name: "Event"
has_many :guest_events, foreign_key: "attendee_id"
has_many :attended_events, through: :guest_events

- event: 
belongs_to :creator, class_name: 'User'
has_many :event_guests, foreign_key: "attended_event_id"
has_many :attendee, through: :event_guests

- event_guest: 
belongs_to :attendee, class_name: "User"
belongs_to :attended_event, class_name: "Event

I want my user to be able to attend an event so I created a link_to in the user/show.html.erb. If they already sign in and attend that event, they can choose to not attend that event anymore by click another link_to helper in the view.

My problem is when user click "Not attend" link, I've got an error saying:

No route matches [GET] "/events/7/event_guests.4"   
  • config/routes.rb file:

     resources :events do 
       resources :event_guests, only: [:create, :destroy]
     end
     resource :user do 
       resources :events 
     end
    
  • Event_guests routes:

      Prefix Verb                URI Pattern                         Controller#Action
      event_event_guests POST   /events/:event_id/event_guests(.:format)     event_guests#create
      event_event_guest DELETE /events/:event_id/event_guests/:id(.:format) event_guests#destroy
    
  • EventsController:

     def show 
       @event = Event.find(params[:id])
       @event_guest = EventGuest.where("attended_event_id = ? AND attendee_id = ?", @event.id, current_user.id)
       if @event_guest.exists? 
         @event_guest = @event_guest.take 
       else 
         @event_guest = nil 
       end
     end 
    
  • EventGuestsController:

     def destroy 
       if EventGuest.exist?(params[:id])
         @event_guest = EventGuest.find(params[:id])
         @event_guest.destroy 
       end
       redirect_to root, status: :see_other
     end 
    
  • link_to helpers in user/show.html.erb:

     <%= link_to "Attend", event_event_guests_path(@event), data: { turbo_method: "post" } %>
     <% if user_signed_in? &&  !@event_guest.nil? %>
       <%= link_to "Not attend", event_event_guests_path(@event, @event_guest), data: {turbo_method: "delete" } %>
     <% end %>
    

In the link_to "Not attend" helper, I tried:

  • event_event_guests_path(@event.id, @event_guest.id)

  • event_event_guests_path(@event, :id => @event_guest.id)

  • event_event_guests_path(:event_id => @event.id, :id => @event_guest.id)

But none of them worked. I used devise to authenticate user. Please help me! Thank you very much.

0

There are 0 best solutions below