В настоящее время я пытаюсь передать User_id и Event_id в качестве параметров для гостя:
Прямо сейчас в консоли я могу создать новый гостевой объект, используя:
Guest.new(user_id: #, event_id: #)
После создания В качестве гостевого объекта я могу вызвать «User.assited_events», чтобы получить все события, которые помогает этому пользователю, так же, как и с событиями, я могу вызвать «Event.assitances», чтобы объединить всех пользователей, помогающих этому событию.
Я просто хочу выяснить способ отправки user_id и event_id из событий # index.
Я использую собственный метод под названием «Assist» внутри контроллера событий
def assist
@guest = Guest.create(:user_id => User.find(session[:current_user_id]), :event_id => Event.find(params[:id]))
respond_to do |format|
if @guest.save
format.html { redirect_to root_path, notice: 'You are now assiting this event!' }
format.json { head :no_content}
else
format.html { redirect_to root_path, notice: "An error happened you can't assist this event" }
format.json { render json: @guest.errors, status: :unprocessable_entity }
end
end
end
Это текущая строка для связи assist_event_path с событиями # index
<td><%= link_to 'Assist', assist_event_path(event), method: :put, data: { confirm: 'Do you want to assist to this event?' } %></td>
Результат в журнале сервера передает оба идентификатора, но объект Guest не создан:
Processing by EventsController#assist as HTML
Parameters: {"authenticity_token"=>"8nddKRZpYcgYDkfJIv/VXK8Os1FmW1oZ+zRIQUnLlE/dhgIA92chq++leqplfaB+bdqIZnCWlB0vPLRfuoHOGw==", "id"=>"1"}
User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 4], ["LIMIT", 1]]
↳ app/controllers/events_controller.rb:65:in `assist'
Event Load (0.2ms) SELECT "events".* FROM "events" WHERE "events"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]]
↳ app/controllers/events_controller.rb:65:in `assist'
Модель пользователя
class User < ApplicationRecord
has_many :events
has_many :guests
has_many :assisted_events, :through => :guests, :source => :event
end
Модель события
class Event < ApplicationRecord
belongs_to :user
has_many :guests
has_many :assistances, :through => :guests, :source => :user
end
Модель гостя
class Guest < ApplicationRecord
belongs_to :user
belongs_to :event
end
файл маршрутов
Rails.application.routes.draw do
resources :events do
member do
patch :assist
put :assist
end
end
resources :users
root 'events#index'
end
РЕДАКТИРОВАТЬ - -
Контроллер событий
class EventsController < ApplicationController
before_action :set_event, only: [:show, :edit, :update, :destroy]
# GET /Events
# GET /Events.json
def index
@events = Event.all
end
# GET /Events/1
# GET /Events/1.json
def show
end
# GET /Events/new
def new
@event = User.find(session[:current_user_id]).events.build
end
# GET /Events/1/edit
def edit
end
# POST /Events
# POST /Events.json
def create
@event = User.find(session[:current_user_id]).events.build(event_params)
respond_to do |format|
if @event.save
format.html { redirect_to @event, notice: 'Event was successfully created.' }
format.json { render :show, status: :created, location: @event }
else
format.html { render :new }
format.json { render json: @event.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /Events/1
# PATCH/PUT /Events/1.json
def update
respond_to do |format|
if @event.update(event_params)
format.html { redirect_to @event, notice: 'Event was successfully updated.' }
format.json { render :show, status: :ok, location: @event }
else
format.html { render :edit }
format.json { render json: @event.errors, status: :unprocessable_entity }
end
end
end
# DELETE /Events/1
# DELETE /Events/1.json
def destroy
@event.destroy
respond_to do |format|
format.html { redirect_to events_url, notice: 'Event was successfully destroyed.' }
format.json { head :no_content }
end
end
def assist
@guest = Guest.create(:user_id => User.find(session[:current_user_id]), :event_id => Event.find(params[:id]))
respond_to do |format|
if @guest.save
format.html { redirect_to root_path, notice: 'You are now assiting this event!' }
format.json { head :no_content}
else
format.html { redirect_to root_path, notice: "An error happened you can't assist this event" }
format.json { render json: @guest.errors, status: :unprocessable_entity }
end
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_event
@event = Event.find(params[:id])
end
# Only allow a list of trusted parameters through.
def event_params
params.require(:event).permit(:title, :body)
end
end
События # Индексный файл
<p id="notice"><%= notice %></p>
<h1>Events</h1>
<% if session[:current_user_id].is_a? Integer %>
<h3>Current User ID: <%= session[:current_user_id] %></h3>
<% else %>
<%= link_to 'Create a new user', new_user_path %>
<% end %>
<table>
<thead>
<tr>
<th colspan="3"></th>
</tr>
</thead>
<tbody>
<% @events.each do |event| %>
<tr>
<td><%= event.title %></td>
<td><%= event.body %></td>
</tr>
<tr>
<td><%= link_to 'Show', event %></td>
<td><%= link_to 'Edit', edit_event_path(event) %></td>
<td><%= link_to 'Assist', assist_event_path(event), method: :put, data: { confirm: 'Do you want to assist to this event?' } %></td>
</tr>
<% end %>
</tbody>
</table>
<br>
<%= link_to 'New event', new_event_path %>