2014-01-29 60 views
0

編輯:解決。解決方案:實例變量未傳遞到視圖中Rails

包括在你的Gemfile gem 'rabl'gem 'oj'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使用強參數,要求您在控制器中編寫一個參數方法。 –

+0

3.2.13。看起來不像參數是問題(請閱讀我對Johns的回答) – chintanparikh

回答

0

您用於查找記錄的ID與數據庫中的ID不匹配。

檢查什麼params[:id]正在評估並確保您可以使用該值查找記錄。

+0

如果我在show方法的底部拋出一個調試器並檢查@article的值,這是一篇有效的文章。 – chintanparikh

+0

然後在您的視圖中發生不好的事情。你可以在視圖中調試'@ article'嗎?根據你的錯誤,你認爲'@ article'是'nil'。 – Jon

+0

燁''@文章'''在我看來絕對是零。奇怪的是,如果我將:html添加到responds_to中,並創建一個打印出@article的show.html.erb,它可以正常工作,所以我認爲這可能是一個棘手的問題。 – chintanparikh

0

找到了解決辦法,你需要這些三線在你的Gemfile:

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

之前,我只用了Rabl的護欄,我認爲是造成問題。

+1

我會將缺失的gem依賴關係作爲bug提交給rabl團隊。如果需要,我希望這些東西能夠自動包含在內。 – Jon

+0

我不認爲實際上用rabl-rails解決了這個問題,而是簡單地在其位置使用常規(較慢)的rabl寶石。 –