0

在 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'

我如何在查询中引用自我?

一定有比这更优雅的解决方案

...JSON.parse(open("#{root_url}/models/{:id}"))....

编辑:

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

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

4

3 回答 3

1

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

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

在哪里model被替换为params[:id]

于 2013-05-07T17:58:25.333 回答
0

更改您的代码:

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"])

我认为这应该有效。

于 2013-05-07T16:18:12.860 回答
0

你需要name方法。

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

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

@model = Model.first
@model.class.name
于 2013-05-07T16:39:30.483 回答