ArgumentError,参数数量错误

时间:2011-08-17 03:33:24

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

我收到了错误

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

3 个答案:

答案 0 :(得分:2)

使用Devise + Omniauth时出现了类似的问题,包括以下症状:

  1. 没有任何应用程序跟踪
  2. 即使我的控制器方法为空,它也不会消失。
  3. 其他控制器工作得很好
  4. 当我重命名我的方法和控制器时,它发生了某种名称冲突。例如:

    Invites#process错误(1表示0)
    Invitations#process - &gt;错误(1表示0)
    Friends#Add - &gt;没错!

    希望这有帮助。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我实际上弄清楚了,我在routes.rb中遗漏了resources :dplans。感谢你的帮助!