2016-11-23 2 views
2

Я создал рельсы API, используя Postgre базы данных, в которой у меня есть название модели (таблица), как counseling_eventNoMethodError (неопределенный метод `пустой«для #? <Событие: 0x6042e88>):

NOTE : Не используя эшафот и используя рельсы-5

Мой scheman (миграция) для counseling_event является следующим:

class CreateCounselingEvent < ActiveRecord::Migration[5.0] 
def change 
create_table :counseling_event do |t| 
    t.text :name 
    t.datetime :start_time 
    t.datetime :end_time 
    t.text :location 
    t.integer :user_id 
    t.integer :role_id 
    t.timestamps 
end 
end 
end 

Я добавил столбец в приведенную выше таблицу, которая имеет тип enum. имя столбца event_type

Теперь, в моем контроллере i.e CounselingEventController, в моем указателе действий я извлекаю данные из таблицы consulting_event. код выглядит следующим образом.

def index 
    @counseling_event = CounselingEvent.where(start_time: "2016-10-30".."2016-12-11") 
    render body: @counseling_event 
end 

, когда я называю это действие контроллера апи из интерфейса через следующий маршрут

get 'counseling_event/index' 

Я получаю эту ошибку в моей консоли:

CounselingEvent Load (1.5ms) SELECT "counseling_event".* FROM "counseling_event" 

    NoMethodError (undefined method `empty?' for #<CounselingEvent:0x47d1d58>): 

    activemodel (5.0.0.1) lib/active_model/attribute_methods.rb:433:in `method_missing' 
    rack (2.0.1) lib/rack/etag.rb:68:in `block in digest_body' 
    activerecord (5.0.0.1) lib/active_record/relation/delegation.rb:38:in `each' 
    activerecord (5.0.0.1) lib/active_record/relation/delegation.rb:38:in `each' 
    actionpack (5.0.0.1) lib/action_dispatch/http/response.rb:145:in `each_chunk' 
    actionpack (5.0.0.1) lib/action_dispatch/http/response.rb:126:in `each' 
    actionpack (5.0.0.1) lib/action_dispatch/http/response.rb:74:in `each' 
    actionpack (5.0.0.1) lib/action_dispatch/http/response.rb:464:in `each' 
    rack (2.0.1) lib/rack/etag.rb:66:in `digest_body' 
    rack (2.0.1) lib/rack/etag.rb:29:in `call' 
    rack (2.0.1) lib/rack/conditional_get.rb:38:in `call' 
    rack (2.0.1) lib/rack/head.rb:12:in `call' 
    activerecord (5.0.0.1) lib/active_record/migration.rb:552:in `call' 
    actionpack (5.0.0.1) lib/action_dispatch/middleware/callbacks.rb:38:in `block in call' 
    activesupport (5.0.0.1) lib/active_support/callbacks.rb:97:in `__run_callbacks__' 
    activesupport (5.0.0.1) lib/active_support/callbacks.rb:750:in `_run_call_callbacks' 
    activesupport (5.0.0.1) lib/active_support/callbacks.rb:90:in `run_callbacks' 
    actionpack (5.0.0.1) lib/action_dispatch/middleware/callbacks.rb:36:in `call' 
    actionpack (5.0.0.1) lib/action_dispatch/middleware/executor.rb:12:in `call' 
    actionpack (5.0.0.1) lib/action_dispatch/middleware/remote_ip.rb:79:in `call' 
    actionpack (5.0.0.1) lib/action_dispatch/middleware/debug_exceptions.rb:49:in `call' 
    actionpack (5.0.0.1) lib/action_dispatch/middleware/show_exceptions.rb:31:in `call' 
    railties (5.0.0.1) lib/rails/rack/logger.rb:36:in `call_app' 
    railties (5.0.0.1) lib/rails/rack/logger.rb:24:in `block in call' 
    activesupport (5.0.0.1) lib/active_support/tagged_logging.rb:70:in `block in tagged' 
    activesupport (5.0.0.1) lib/active_support/tagged_logging.rb:26:in `tagged' 
    activesupport (5.0.0.1) lib/active_support/tagged_logging.rb:70:in `tagged' 
    railties (5.0.0.1) lib/rails/rack/logger.rb:24:in `call' 
    actionpack (5.0.0.1) lib/action_dispatch/middleware/request_id.rb:24:in `call' 
    rack (2.0.1) lib/rack/runtime.rb:22:in `call' 
    activesupport (5.0.0.1) lib/active_support/cache/strategy/local_cache_middleware.rb:28:in `call' 
    actionpack (5.0.0.1) lib/action_dispatch/middleware/executor.rb:12:in `call' 
    actionpack (5.0.0.1) lib/action_dispatch/middleware/static.rb:136:in `call' 
    rack (2.0.1) lib/rack/sendfile.rb:111:in `call' 
    rack-cors (0.4.0) lib/rack/cors.rb:80:in `call' 
    railties (5.0.0.1) lib/rails/engine.rb:522:in `call' 
    puma (3.6.0) lib/puma/configuration.rb:225:in `call' 
    puma (3.6.0) lib/puma/server.rb:578:in `handle_request' 
    puma (3.6.0) lib/puma/server.rb:415:in `process_client' 
    puma (3.6.0) lib/puma/server.rb:275:in `block in run' 
    puma (3.6.0) lib/puma/thread_pool.rb:116:in `call' 
    puma (3.6.0) lib/puma/thread_pool.rb:116:in `block in spawn_thread' 

не знаю причину для ошибки, но, пытаясь ее решить. может ли кто-нибудь помочь мне решить эту ошибку. это похоже на некоторую ошибку activemodel. Заранее спасибо.

+0

даже сталкиваюсь с той же проблемой, я пробовал с различными устройствами и средой, но это не помогло. – chinna2580

ответ

1

Рельсы основаны на стойке. Стойка может обрабатывать только строки. Вы создаете объект, а не строку.

Вы, вероятно, хотите что-то вроде:

render plain: @counceling_event.to_s 

Это в основном происходит из-за попытки стойки для вызова #empty? на теле ответа, чтобы определить, как она должна ответить клиенту.

Но так как ваш @counceling_event не является строкой и не отвечает на empty?, это терпит неудачу.

Я не уверен, что вы пытаетесь сделать на render body: <SOMETHING>. Если вы используете приложение Rails, вы, вероятно, захотите визуализировать представление вместо контента непосредственно с контроллера.

Если вы действительно хотите визуализировать с контроллера, вы должны рассмотреть возможность использования render plain: <SOMETHING>.

Надеюсь, это поможет.

+0

Возможно, вы правы. @Emil проблема решена после замены 'render body'. Я использовал «render body» для получения именно активных записей из моей базы данных. Я бы рекомендовал дальнейшее объяснение. Спасибо. –

Смежные вопросы