【问题标题】:Instance variable not passed into view in Rails实例变量未在 Rails 中传递到视图中
【发布时间】:2014-01-29 00:51:38
【问题描述】:

编辑:已解决。解决方案:

包括 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

有什么想法吗?

【问题讨论】:

  • 你的 Rails 版本是什么? Rails 4 使用强参数,需要您在控制器中编写参数方法。
  • 3.2.13。看起来参数不是问题(阅读我对 Johns 答案的评论)

标签: ruby-on-rails ruby json rabl


【解决方案1】:

您用于查找记录的 ID 与您的数据库中的 ID 不匹配。

检查 params[:id] 评估的对象并确保您可以使用该值找到记录。

【讨论】:

  • 如果我在 show 方法的底部抛出一个调试器并检查 @article 的值,它是一个有效的文章。
  • 那么在你看来有些不好的事情正在发生。可以在视图中调试@article 吗?根据您的错误,@article 在您看来是 nil
  • 是的 @article 在我看来绝对是零。奇怪的是,如果我将 :html 添加到 responds_to,并创建一个打印出 @article 的 show.html.erb,它工作正常,所以我认为可能是 rabl 起作用了。
【解决方案2】:

找到了解决方案,你的 Gemfile 中需要这三行:

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

以前,我只有 rabl-rails,我认为这是导致问题的原因。

【讨论】:

  • 然后我会将缺少的 gem 依赖项作为错误提交给 rabl 团队。如果事情需要,我希望这些会自动包含在内。
  • 我认为实际上并没有解决 rabl-rails 的问题,而只是使用常规(较慢)的 rabl gem 代替它。
猜你喜欢
  • 1970-01-01
  • 2014-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多