неверное количество аргументов (задано 0, ожидается 1) - PullRequest
0 голосов
/ 03 октября 2018

Что я пытаюсь сделать

Я пытаюсь each do над таблицей создать новые отношения.

Правила таковы:

  • Пользователь создает события
  • В событии может быть много гостей (пользователей)

Я хочу, чтобы current_user в соответствии с разработанным гемом мог присоединяться к событиям.

Что я пытался

class AttendingEventsController < ApplicationController

  def new
    @attending_event = AttendingEvent.new
  end

  def join event_id
    @attending_event = @attending_event.new(user_id: current_user.id, event_id: event_id)
  end
end

При присоединении к событию с помощью метода join в качестве пользователя я получаю сообщение об ошибке с неправильными аргументами.

Моя кнопка выглядит следующим образом:

<% Event.all.each do |e| %>
      <tr>
        <td><%= e.title %></td>
        ...
        <td><%= button_to "join event", join_path e.id, method: :get %></td>
      </tr>
<% end %>

Файл маршрутов для справки:

Rails.application.routes.draw do
  devise_for :users
  get 'welcome/home'
  get 'events/all'
  get 'users/index'

  get '/join', to: 'attending_events#join', as: 'join'


  resources :users do
    resources :events
  end

  root 'welcome#home'
end

1 Ответ

0 голосов
/ 03 октября 2018

Я думаю, что ваши маршруты будут выглядеть примерно так (я не думаю, что вам нужно вкладывать их в 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 %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...