【问题标题】:How to refer to the current record in a Rails query?如何在 Rails 查询中引用当前记录?
【发布时间】:2013-05-07 13:14:04
【问题描述】:

在 Rails 控制器中,我使用对外部数据库的 JSON 请求来返回用于对记录集合进行排序的整数:

Model.order(JSON.parse(open("http://myapp.com/models/#{:id}")).read)['attribute'])

我想让这个动态来帮助在环境之间切换。比如:

Model.order(JSON.parse(open(model_url(model))).read)['attribute'])

这是不正确的,model_url(model) 正在返回错误:

undefined local variable or method 'model'

如何在查询中引用 self?

一定有比

更优雅的解决方案
...JSON.parse(open("#{root_url}/models/{:id}"))....

编辑:

Lightswitch05 在下面的回答确实回答了我提出的问题。查询应该引用params[:id]来获取当前记录的url。

事实上,我已经决定将这个 JSON 调用移动到模型上的虚拟属性中。这意味着我可以简单地拨打Model.order(:my_virtual_attribute)。虽然这个解决方案带来了自己的问题——我需要让 url_helpers 对模型可用——但从长远来看,我认为这将是一个更简洁的解决方案。

【问题讨论】:

  • 你到底想完成什么?
  • 您能否提供一个“视图”代码的 sn-p,将您想要的内容发送回控制器?
  • 嗨@thisfeller,查看代码没有任何用处。它只是一个索引视图。但我需要从外部 JSON 请求中获取记录顺序
  • 那么,您试图从外部 API 请求中获取的只是模型的 ID?您是否还没有开始发出外部请求的模型 ID?
  • @giorgan,我正在尝试在查询中引用当前记录。基本上我想知道如何实现Model.order(model_url(model))。而且我知道这本身没有任何意义,但其他一切只会减损真正的问题。

标签: ruby-on-rails


【解决方案1】:

根据我们的discussion,问题是model 没有定义。由于您对model 所做的只是获取它的网址,因此您真正需要的是params[:id]。这将修复您的错误消息:

Model.order(JSON.parse(open(model_url(params[:id]))).read)['attribute'])

其中model 已替换为params[:id]

【讨论】:

    【解决方案2】:

    更改您的代码:

    Model.order(JSON.parse(open(model_url(model))).read)['attribute'])
    

    到:

    model_tableized = Model.to_s.tableize
    model_url = "#{model_tableized}_url(#{model_tableized.chomp('s')})"
    Model.order(JSON.parse(open(model_url).read)["attribute"])
    

    我认为应该可以。

    【讨论】:

      【解决方案3】:

      您需要name 方法。

      如果您使用的是模型,而不是模型的实例,则为 Model.name

      如果您使用的是实例,那将是

      @model = Model.first
      @model.class.name
      

      【讨论】:

        猜你喜欢
        • 2011-05-12
        • 1970-01-01
        • 1970-01-01
        • 2020-07-14
        • 2012-12-09
        • 1970-01-01
        • 2022-07-26
        • 1970-01-01
        • 2020-01-07
        相关资源
        最近更新 更多