【问题标题】:ArgumentError, wrong number of argumentsArgumentError,参数数量错误
【发布时间】:2011-08-17 03:33:24
【问题描述】:

我收到了错误

ArgumentError in PagesController#home, wrong number of arguments (0 for 1)

但我不知道为什么。我有一个来自 Devise 的 Users 模型和一个 Dplan 模型,其中 dplan belongs_to :user 和一个用户 has_many :dplans。我正在尝试设置我的网站,以便您可以在主页上创建新的 dplan。我的主页视图是这样的:

<% if user_signed_in? %>
<h1>Hello <%= current_user.name %>! <h1>

<%= form_for @dplan do |f|%>
    <div class="field">
        <%= f.text_area :name %>
    </div>
    <div class="actions">
        <%= f.submit "Submit" %>
    </div>
<% end %>

<% else %>
<h1>DPlanner</h1>
<p>
    This is the home page for DPlanner.
</p>

<%= link_to "Sign up now!", new_user_registration_path, :class =>   "signup_button round" %>
<% end %>

这是 dplans_controller.rb:

class DplansController < ApplicationController

  def create
      @dplan = current_user.dplans.build(params[:dplan])
      if @dplan.save
          flash[:success]="Dplan created!"
          redirect_to root_path
      else
          render 'pages/home'
      end 
  end 

  def destroy
  end 

end

这里是 pages_controller.rb:

class PagesController < ApplicationController

    def home
        @title = "Home"
        @dplan = Dplan.new if user_signed_in?
    end

end

我不明白为什么我会收到此错误消息 - 页面上需要的唯一参数是 dplan,我在页面控制器中定义了它。救命!

这里是 dplan.rb:

class Dplan < ActiveRecord::Base
    attr_accessible :name

    belongs_to :user

    validates :name, :presence=>true, :length => { maximum => 30 }
    validates :user_id, :presence =>true

end

【问题讨论】:

  • 看起来 Dplan 的构造函数需要一个参数。能否包含 Dplan 类。
  • 如果我注释掉 2 validates 行,我会收到一条错误消息:NoMethodError in Pages#home, undefined method dplans_path' for #:0x00000101c42320>` 看起来它有问题@dplan 在主视图中的 form_for @dplan do... 行中。 pages_controller 中的@dplan=Dplan.new 行有问题吗?
  • 我认为#home 中的问题是@dplan 仅在用户登录时才定义。如果用户未登录会发生什么?

标签: ruby-on-rails controller devise argument-error


【解决方案1】:

我在使用 Devise + Omniauth 时遇到了类似的问题,症状包括:

  1. 没有任何应用程序跟踪
  2. 即使我的控制器方法为空,它也不会消失。
  3. 其他控制器工作正常

当我重命名我的方法和控制器时,结果是某种名称冲突消失了。例如:

Invites#process 错误(1 代表 0)
Invitations#process --> 错误(1 代表 0)
Friends#Add --> 没有错误!

希望这会有所帮助。

【讨论】:

  • 非常感谢!修复了我的问题。
  • 谢谢,我也使用了保留关键字的过程,遇到了这个问题。
【解决方案2】:

尝试将user_signed_in? 替换为current_user。或者尝试在 application_controller.rb 中添加 before_filter :authenticate_user! 以避免控制器中的 if 语句。

【讨论】:

  • 这个答案不正确。错误发生在PagesController#home,而不是DplansController#create。
  • Kishie,感谢您的回答,但没有成功。米莎说的对,错误在PagesController#home,但我不知道是什么。
  • 想通了!我在routes.rb 中丢失了resources :dplans。感谢您的所有帮助!
【解决方案3】:

我实际上想通了,我在 routes.rb 中缺少resources :dplans。感谢你的帮助!

【讨论】:

    猜你喜欢
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    • 2012-02-07
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多