Rails - 在rabl文件中使用params []

时间:2013-09-01 19:01:53

标签: ruby-on-rails json rabl

我有一个名为Location的模型,它使用Geocoder在创建时从坐标中检索地址。然后我有一个Android应用,它会向控制器询问我index的{​​{1}}方法中特定点周围的位置列表:

locations_controller

结果在json中使用Rabl格式化并发送到应用程序:

def index
    @locations = Location.near([params[:latitude], params[:longitude]], params[:search_radius], :order => :distance)
end

到目前为止效果很好,child :data do child @location do attributes :id, :name, :address, :city, :state, :zipcode, :country_name, :latitude, :longitude, :distance end end 会自动计算。

但现在我为用户提供了在应用中创建:distance的可能性,因此我以这种方式设计了Location方法:

create

创作效果很好,我可以将包含基本信息的rabl文件发送给用户,但我的问题是def create @location = Location.new(params[:location]) if @location.save @location else render :status => :unprocessable_entity, :json => { :success => false, :info => @location.errors, :data => {} } end end 未计算。

我想使用与:distance方法相同的Rabl模板并添加类似的东西,但它不起作用:

index

我可以在Rabl文件中使用params来计算吗?

或者我必须在控制器中执行此操作?我是否需要在模型中添加属性?

更新

这是我的node(:distance) { |location| location.distance_to(params[:latitude], params[:longitude]) } 模型:

Location

1 个答案:

答案 0 :(得分:2)

事实上,我预期的更简单,如果其他人想知道怎么做,我会发布解决方案。

create的{​​{1}}方法中,我创建了一个实例变量来存储locations_controller的结果:

distance_to

然后在@distance_to = @location.distance_to([params[:current_latitude],params[:current_longitude]]) 我创建了一个create.json.rabl来显示这个实例变量:

node

我真的认为这比那困难得多...... 谢谢@ rudolph9的帮助!