【发布时间】: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 methoddplans_path' for #:0x00000101c42320>` 看起来它有问题@dplan在主视图中的form_for @dplan do...行中。pages_controller中的@dplan=Dplan.new行有问题吗? -
我认为#home 中的问题是@dplan 仅在用户登录时才定义。如果用户未登录会发生什么?
标签: ruby-on-rails controller devise argument-error