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.rbfile:resources :events do resources :event_guests, only: [:create, :destroy] end resource :user do resources :events endEvent_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#destroyEventsController: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 endEventGuestsController:def destroy if EventGuest.exist?(params[:id]) @event_guest = EventGuest.find(params[:id]) @event_guest.destroy end redirect_to root, status: :see_other endlink_tohelpers inuser/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.