如何在Rails查询中引用当前记录?

时间:2013-05-07 13:14:04

标签: ruby-on-rails

在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]以获取当前记录的网址。

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

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分: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"])

我认为这应该有用。

答案 2 :(得分:0)

您需要name方法。

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

如果你正在使用一个实例,它将是

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