Я думаю, что ваши маршруты будут выглядеть примерно так (я не думаю, что вам нужно вкладывать их в users
):
resources :events do
member do
get :join
end
end
Что даст вам:
join_event GET /events/:id/join(.:format) events#join
events GET /events(.:format) events#index
POST /events(.:format) events#create
new_event GET /events/new(.:format) events#new
edit_event GET /events/:id/edit(.:format) events#edit
event GET /events/:id(.:format) events#show
PATCH /events/:id(.:format) events#update
PUT /events/:id(.:format) events#update
DELETE /events/:id(.:format) events#destroy
Затем в вашем EventsController
выполните:
class EventsController < ApplicationController
def new
# I don't know if you need this, based on the code you posted
@attending_event = AttendingEvent.new
end
def join
@event = Event.find(params[:id])
@attending_event = current_user.attending_events.new(event: @event)
if @attending_event.save
#do something
else
#do something else
end
end
end
Это предполагает, что:
class User < ActiveRecord::Base
has_many :attending_events
end
И:
class AttendingEvent < ActiveRecord::Base
belongs_to :user
belongs_to :event
end
Затем в вашемпросмотр:
<% Event.all.each do |e| %>
<tr>
<td><%= e.title %></td>
...
<td><%= button_to "join event", join_event_path(e), method: :get %></td>
</tr>
<% end %>