Ruby on Rails: неопределенный метод `call 'для nil: NilClass - PullRequest
0 голосов
/ 15 июля 2010

Это строка, на которую он попадает.

@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}"

и консоль показывает, что объект не ноль .. = \

Журнал показывает:

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)

Ответы [ 2 ]

3 голосов
/ 15 июля 2010

Это означает ... э-э ... что вы пытаетесь вызвать метод "call" для объекта "nil".

Это происходит, когда вы используете объект, думая, что он должен быть vaild, то есть вместо ноля. Это может иметь место, например, если Object.find не может найти объект и возвращает «ноль».

@ объект тогда будет иметь значение «ноль», и вы не можете обращаться с ним, как если бы он имел тип Object.

РЕДАКТИРОВАТЬ: всегда проверять, используя "ноль?" перед использованием объекта с неопределенным происхождением.

1 голос
/ 15 июля 2010

Как оказалось, эта ошибка произошла, потому что (в рельсах 2.3.8) я думаю, вы не можете установить datetime с date_select.

Поэтому я изменил свой f.date_select на f.datetime_select и заново сохранил дату, и все было хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...