2014-01-29 6 views
0

EDIT: Решено. Решение:Переменная экземпляра не попала в поле зрения Rails

Включите gem 'rabl' и gem 'oj' в вашем Gemfile вместе с gem rabl-rails

По какой-то причине, мой экземпляр переменной не передается в поле зрения (я использую RABL).

Вот соответствующий код:

articles_controller.rb

class ArticlesController < ApplicationController 
    respond_to :json, :xml 

    def index 
    @articles = Article.original.last(100) 
    end 

    def after 
    @articles = Article.where("id > #{params[:id]}") 
    end 

    def show 
    @article = Article.find(params[:id]) 
    end 
end 

show.json.rabl

object @article 

attributes :id, :headline, :source, :link 

attributes :similar_articles => :similar 

Ошибка:

RuntimeError in Articles#show 

Showing /Users/chintanparikh/Dropbox/Projects/Current/article_aggregator/app/views/articles/show.json.rabl where line #2 raised: 

Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id 

Любые идеи?

+0

Какова ваша версия Rails? Rails 4 использует сильные параметры, которые требуют, чтобы вы написали метод param в контроллере. –

+0

3.2.13. Не похоже, что params - это проблема (прочитайте мой комментарий к Johns answer) – chintanparikh

ответ

0

Идентификатор, используемый для поиска записи, не совпадает с идентификатором вашей базы данных.

Проверьте, что params[:id] оценивает и гарантирует, что вы можете найти запись, используя эту ценность.

+0

Если я отброшу отладчик в нижней части метода show и проверьте значение @article, это действительная статья. – chintanparikh

+0

Тогда что-то плохое происходит на ваш взгляд. Можете ли вы отлаживать '@ статью' в представлении? Согласно вашей ошибке, '@ article' является' nil' на ваш взгляд. – Jon

+0

Yup '' '@ article''' определенно нуль на мой взгляд. Странно, если я добавлю: html к responses_to и создаю show.html.erb, который выдает @article, он отлично работает, поэтому я думаю, что это может быть rabl, который действует. – chintanparikh

0

Найдено решение, вам нужны эти три строки в Gemfile:

gem 'rabl-rails' 
gem 'rabl' 
gem 'oj' 

Перед, я только имел RABL-рельсы, и я полагаю, что вызывает проблемы.

+1

Я бы отправил недостающие характеристики gem в команду rabl как ошибку. Я ожидаю, что они будут включены автоматически, если это необходимо для работы. – Jon

+0

Я не думаю, что на самом деле исправляет проблему с rabl-rails, но просто использует обычный (более медленный) rabl-камень на своем месте. –

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