这是它登陆的路线。
@object = Object.find(params[:id])
respond_to do |format|
if @object.update_attributes(:status=>Object::PUBLISHED, :published_at => Time.now)
format.html { redirect_to :action => :publish_detail }
format.xml { head :ok }
format.json { head :ok }
#else
# flash[:error] = 'There was a problem updating your object.'
# format.html { redirect_to :action => "publish_detail" }
# format.xml { render :xml => @object.errors, :status => :unprocessable_entity }
# format.json { render :json => @object.errors, :status => :unprocessable_entity }
end
end
和堆栈跟踪
/opt/local/lib/ruby/gems/1.8/gems/activesupport-2.3.8/lib/active_support/whiny_nil.rb:52:in `method_missing'
/opt/local/lib/ruby/gems/1.8/gems/actionpack-2.3.8/lib/action_controller/mime_responds.rb:175:in `respond'
/opt/local/lib/ruby/gems/1.8/gems/actionpack-2.3.8/lib/action_controller/mime_responds.rb:173:in `each'
/opt/local/lib/ruby/gems/1.8/gems/actionpack-2.3.8/lib/action_controller/mime_responds.rb:173:in `respond'
/opt/local/lib/ruby/gems/1.8/gems/actionpack-2.3.8/lib/action_controller/mime_responds.rb:107:in `respond_to'
.../app/controllers/objects_controller.rb:252:in `publish'
为什么我会在那里收到错误?
我添加了
puts "||||||||||||||||||#{@object.name}"
并且控制台显示该对象不是nil .. = \
日志显示:
NoMethodError (undefined method `call' for nil:NilClass):
app/controllers/objects_controller.rb:252:in `publish'
Rendered rescues/_trace (26.1ms)
Rendered rescues/_request_and_response (1.1ms)
Rendering rescues/layout (internal_server_error)
答案 0 :(得分:3)
这意味着......呃......你试图在“零”对象上调用“call”方法。
当您使用一个认为它应该是vaild的对象时,会发生这种情况,而不是nil。这可能是这种情况,例如如果Object.find找不到对象并返回“nil”。
@object将为“nil”,您不能将其视为Object类型。
编辑:总是使用“nil?”进行检查。在使用具有不确定性的对象之前。答案 1 :(得分:1)
事实证明,这个错误发生了,因为(在rails 2.3.8中)我猜你不能用date_select设置日期时间。
所以我将f.date_select更改为f.datetime_select并重新保存日期,一切都很顺利。