【问题标题】:RABL collection appears empty in template but not in controllerRABL 集合在模板中显示为空,但在控制器中不显示
【发布时间】:2019-03-21 18:32:08
【问题描述】:

我目前使用的是 rabl-rails 0.5.3 和 Rails 4.2.6

我遇到了这个问题,我试图从 Rails 控制器的 index 方法渲染我的 College 对象集合。

这是我控制器中索引方法的简化版本:

  def index
    @colleges = College.all

    puts @colleges.count

    render 'api/data_bridge/colleges/show'
  end

我在那里看到 puts 语句的输出为“100”。有些显然@colleges 不是空的。

这里是 rabl 索引模板:

puts "---===========================-"
puts @colleges.inspect
puts "---===========================-"
collection @colleges

在我的服务器输出中,我看到那些 puts 语句看起来像:

---===========================-
nil
---===========================-

当我将@colleges 转储到控制器中时,它绝对不是零。我无法弄清楚控制器和模板之间的数据发生了什么。

【问题讨论】:

    标签: ruby-on-rails json rabl


    【解决方案1】:

    作为我声明来源的文档:https://github.com/ccocchi/rabl-rails#overview

    您的 rabl 文件应如下所示:

    puts "---===========================-"
    puts :@colleges.inspect
    puts "---===========================-"
    collection :@colleges
    

    这是他们的例子:

    # app/views/post/index.rabl
    collection :@posts
    attributes :id, :title, :subject
    child(:user) { attributes :full_name }
    node(:read) { |post| post.read_by?(@user) }
    

    密切注意符号前面的“:”。原因如下:

    在任何渲染上下文之外编译模板的事实 阻止我们使用任何实例变量(节点除外) 在模板中,因为它们正在渲染对象。所以相反,你会 必须使用这些变量的符号。例如,渲染 在 PostController 中收集 @posts,您需要使用 :@posts 在模板内部。

    【讨论】:

    • 优秀。这让我更近了一步。现在我收到关于“模型学院中表学院的未知主键”的错误。该模型的主键是“college_id”而不是“id”。我尝试在模型中指定set_primary_key = 'college_id',但无论哪种方式都会出现相同的错误
    • 如果我解决了您原来的问题,请将此标记为已解决!你真的应该坚持惯例。不要在模型中覆盖它。生成迁移rails g migration AddPrimaryKeyToColleges id:primary_key。然后运行rails db:migrate。如果不想迁移,需要使用正确的语法:self.primary_key = "college_id"
    • 更改列主 ID 不在我的掌控之中。这是在我到达之前实施的事情,并且我所在团队的大部分人都坚决坚持。事实上,鉴于我正在执行的任务,我无法更改有关数据库的任何内容——我只是从中读取。我会将其标记为已解决。只是试图拒绝提出另一个问题......
    猜你喜欢
    • 1970-01-01
    • 2012-08-14
    • 2019-02-17
    • 1970-01-01
    • 1970-01-01
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多