我想知道这样聪明的方法......
我有一些方法在将对象作为参数传递时返回一个值,例如:
我想使用与嵌套资源完全相同的方法来通过jQuery / Ajax调用,如下所示:
.load( '/位置/ 8 / average_rainfall')
我理解如何定义路由,但是如何告诉我的方法'find'/ location / 8并将其作为参数而不是@location按预期使用?
谢谢!
答案 0 :(得分:0)
不确定您的确切情况,但一种选择是使用数据前缀属性(html5)。然后,您可以使用javascript从中获取URL。
所以如果在div上:
<div data-rainfall_path="<%= average_rainfall_path(@location) -%>"></div>
然后用jQuery抓住它来发出你的ajax请求。
这是我做的聪明方式。
答案 1 :(得分:0)
您似乎正在尝试使用视图助手和控制器逻辑,其中模型是理想的。您应该将average_rainfall方法粘贴在Location模型中,然后在视图中使用它,如下所示:
<%= @location.average_rainfall %>
然后在您的位置控制器中,通过从javascript调用/locations/1/avg_rainfall
来使用它。
def avg_rainfall
@location = Location.find( params[:id] )
render :json => { :avg_rainfall => @location.average_rainfall }
end
答案 2 :(得分:-1)
我只是在生成视图时将URL传递给JavaScript,如下所示:
var ajaxWidget = new AjaxWidget('<%= average_rainfall(@location) %>');
这对我有用,因为我不需要传递大量的URL。我只是将基本URL传递给对象,然后根据需要在JavaScript中添加动作名称以进行Ajax调用。这个问题是我无法保持JavaScript完全不引人注目,所以我希望看到更好的答案。