【问题标题】:wrong number of arguments (given 0, expected 1)参数数量错误(给定 0,预期为 1)
【发布时间】:2018-10-03 18:08:55
【问题描述】:

我想要做什么

我正在尝试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

【问题讨论】:

标签: ruby-on-rails


【解决方案1】:

我认为您的路线看起来更像(我认为您不需要将其嵌套在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 %>

【讨论】:

  • 错误消失了,但是sqlite&gt; Select count(*) from attending_events; 返回0,即使加入按钮触发了join。这是可以理解的,因为我不再传递参数了。还是不行。
  • 我根据您的建议进行了调整,但是我得到了 undefined method join_event_path' 的 #:0x007f96bb4aa408>`
  • 你更新你的routes.rb了吗?如果您在控制台中执行rake routes,您可以看到可用的路线及其名称。
  • 根据你的感觉应该在那里。它产生了错误。随时查看the feature branch on Github。我只是推动了这些变化。我知道这有点明目张胆,但我觉得我们在这里遗漏了一些东西。
  • 在您的routes.rb 中,您执行users do。应该是member do
猜你喜欢
  • 1970-01-01
  • 2020-08-02
  • 1970-01-01
  • 1970-01-01
  • 2023-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多