2009-02-21 109 views
4

我正在構建一個帶有註釋的簡單博客。有一個Post模型和一個評論模型。除了創建新評論之外,兩者之間的每個交互都很好。在Rails中保存模型的問題

wrong number of arguments (1 for 0) 

這裏是請求參數(從堆棧跟蹤):

{"commit"=>"Post My Comment", 
"post_id"=>"1", 
"authenticity_token"=>"5a7b3ad3dda771d4ef5eb5850018649a8be2af11", 
"comment"=>{"name"=>"bj", 
"website"=>"asdf.com", 
"comment"=>"asdf", 
"email"=>"[email protected]"}} 

而且全堆棧跟蹤:試圖發表新評論時,我在Rails中的一個問題

/Library/Ruby/Gems/1.8/gems/activerecord-2.1.0/lib/active_record/callbacks.rb:296:in `notify' 
/Library/Ruby/Gems/1.8/gems/activerecord-2.1.0/lib/active_record/callbacks.rb:296:in `callback' 
/Library/Ruby/Gems/1.8/gems/activerecord-2.1.0/lib/active_record/callbacks.rb:263:in `valid?' 
/Library/Ruby/Gems/1.8/gems/activerecord-2.1.0/lib/active_record/validations.rb:900:in `save_without_dirty' 
/Library/Ruby/Gems/1.8/gems/activerecord-2.1.0/lib/active_record/dirty.rb:75:in `save_without_transactions' 
/Library/Ruby/Gems/1.8/gems/activerecord-2.1.0/lib/active_record/transactions.rb:106:in `save' 
/Library/Ruby/Gems/1.8/gems/activerecord-2.1.0/lib/active_record/connection_adapters/abstract/database_statements.rb:66:in `transaction' 
/Library/Ruby/Gems/1.8/gems/activerecord-2.1.0/lib/active_record/transactions.rb:79:in `transaction' 
/Library/Ruby/Gems/1.8/gems/activerecord-2.1.0/lib/active_record/transactions.rb:98:in `transaction' 
/Library/Ruby/Gems/1.8/gems/activerecord-2.1.0/lib/active_record/transactions.rb:106:in `save' 
/Library/Ruby/Gems/1.8/gems/activerecord-2.1.0/lib/active_record/transactions.rb:118:in `rollback_active_record_state!' 
/Library/Ruby/Gems/1.8/gems/activerecord-2.1.0/lib/active_record/transactions.rb:106:in `save' 
app/controllers/comments_controller.rb:39:in `create' 
/Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/base.rb:1162:in `send' 
/Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/base.rb:1162:in `perform_action_without_filters' 
/Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/filters.rb:580:in `call_filters' 
/Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/filters.rb:573:in `perform_action_without_benchmark' 
/Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/benchmarking.rb:68:in `perform_action_without_rescue' 
/Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/benchmarking.rb:68:in `perform_action_without_rescue' 
/Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/rescue.rb:201:in `perform_action_without_caching' 
/Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/caching/sql_cache.rb:13:in `perform_action' 
/Library/Ruby/Gems/1.8/gems/activerecord-2.1.0/lib/active_record/connection_adapters/abstract/query_cache.rb:33:in `cache' 
/Library/Ruby/Gems/1.8/gems/activerecord-2.1.0/lib/active_record/query_cache.rb:8:in `cache' 
/Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/caching/sql_cache.rb:12:in `perform_action' 
/Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/base.rb:529:in `send' 
/Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/base.rb:529:in `process_without_filters' 
/Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/filters.rb:569:in `process_without_session_management_support' 
/Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/session_management.rb:130:in `process' 
/Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/base.rb:389:in `process' 
/Library/Ruby/Gems/1.8/gems/mongrel-1.1.5/lib/mongrel/rails.rb:76:in `process' 
/Library/Ruby/Gems/1.8/gems/mongrel-1.1.5/lib/mongrel/rails.rb:74:in `synchronize' 
/Library/Ruby/Gems/1.8/gems/mongrel-1.1.5/lib/mongrel/rails.rb:74:in `process' 
/Library/Ruby/Gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:159:in `process_client' 
/Library/Ruby/Gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:158:in `each' 
/Library/Ruby/Gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:158:in `process_client' 
/Library/Ruby/Gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:285:in `run' 
/Library/Ruby/Gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:285:in `initialize' 
/Library/Ruby/Gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:285:in `new' 
/Library/Ruby/Gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:285:in `run' 
/Library/Ruby/Gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:268:in `initialize' 
/Library/Ruby/Gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:268:in `new' 
/Library/Ruby/Gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:268:in `run' 
/Library/Ruby/Gems/1.8/gems/mongrel-1.1.5/lib/mongrel/configurator.rb:282:in `run' 
/Library/Ruby/Gems/1.8/gems/mongrel-1.1.5/lib/mongrel/configurator.rb:281:in `each' 
/Library/Ruby/Gems/1.8/gems/mongrel-1.1.5/lib/mongrel/configurator.rb:281:in `run' 
/Library/Ruby/Gems/1.8/gems/mongrel-1.1.5/bin/mongrel_rails:128:in `run' 
/Library/Ruby/Gems/1.8/gems/mongrel-1.1.5/lib/mongrel/command.rb:212:in `run' 
/Library/Ruby/Gems/1.8/gems/mongrel-1.1.5/bin/mongrel_rails:281 
/Library/Ruby/Gems/1.8/gems/activesupport-2.1.0/lib/active_support/dependencies.rb:502:in `load' 
/Library/Ruby/Gems/1.8/gems/activesupport-2.1.0/lib/active_support/dependencies.rb:502:in `load' 
/Library/Ruby/Gems/1.8/gems/activesupport-2.1.0/lib/active_support/dependencies.rb:354:in `new_constants_in' 
/Library/Ruby/Gems/1.8/gems/activesupport-2.1.0/lib/active_support/dependencies.rb:502:in `load' 
/Library/Ruby/Gems/1.8/gems/rails-2.1.0/lib/commands/servers/mongrel.rb:64 
/Library/Ruby/Gems/1.8/gems/activesupport-2.1.0/lib/active_support/dependencies.rb:509:in `require' 
/Library/Ruby/Gems/1.8/gems/activesupport-2.1.0/lib/active_support/dependencies.rb:354:in `new_constants_in' 
/Library/Ruby/Gems/1.8/gems/activesupport-2.1.0/lib/active_support/dependencies.rb:509:in `require' 
/Library/Ruby/Gems/1.8/gems/rails-2.1.0/lib/commands/server.rb:39 

我已經收窄誤差降到保存方法我打電話的評論模型:

/Library/Ruby/Gems/1.8/gems/activerecord-2.1.0/lib/active_record/transactions.rb:106:in `save' 
app/controllers/comments_controller.rb:39:in `create' 

在我的部分,其產生錯誤(當我後)的形式如下(form_row是我創建創建一個簡單的輔助方法,以及,一個表格行):

<% form_for [post, new_comment] do |f| %> 
<%= form_row('Name', f.text_field(:name, :size => 30), 'comment_name') %> 
<%= form_row('Email', f.text_field(:email, :size => 30) + content_tag(:span, "*", :class => "required"), 'comment_email') %> 
<%= form_row('Website', f.text_field(:website, :size => 30) + content_tag(:span, "*", :class => "required"), 'comment_website') %> 
<%= form_row('Comment', f.text_area(:comment, { :rows => 10, :cols => 40 }), 'comment_comment') %> 
<%= form_row('', '<span class="sm-text"><span class="required">*</span> Denotes fields that will not be displayed on your comment</span>') %> 
<%= form_row('', submit_tag("Post My Comment")) %> 
<% end -%> 

我懷疑問題是我如何使用form_for,但我已經嘗試過所有可能的組合和咒語,但仍然無法弄清楚這一點。我的帖子和評論型號如下:

class Post < ActiveRecord::Base 
    has_many :comments 
    has_many :tags, :through => :posts_tags 
    belongs_to :user 

    validates_presence_of :user_id, :title, :body 
    validates_numericality_of :user_id 
end 

class Comment < ActiveRecord::Base 
    belongs_to :posts 

    validates_presence_of :post_id, :name, :email, :comment 
    validates_numericality_of :post_id 
end 

最後,控制器代碼進行保存:

def create 
    begin 
    @comment = Comment.new(params[:comment]) 
    @comment.name = 'Anonymous' if @comment.name.nil? 
    if @comment.save # the error occurs here 
     ... 

我真的難倒。預先感謝您的幫助。

+0

請附上完整的錯誤輸出(消息+堆棧跟蹤) – vladr 2009-02-21 18:03:19

+0

我剛剛爲您添加了堆棧跟蹤和請求參數。 – localshred 2009-02-21 18:31:02

回答

7

您可能已在模型表中定義了notify屬性(列),它與框架方法notify(...)相沖突。使用不同的列名稱,例如notify_me