在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可用于模型 - 从长远来看,我认为这将是一个更清洁的解决方案。
答案 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