如何在Rails中为参数设置默认值?

时间:2017-01-10 02:38:25

标签: ruby-on-rails

控制器

def index
  markers =  Marker.nearby(params[:lat], params[:lng], params[:radius])
end

模型

def self.nearby(lat, lng, radius)
  approved.near([lat.to_f, lng.to_f], radius, units: :km)
end

路线:

resources :markers

URL:

http://localhost:3000/markers?lat=11111111&lng=10101010101&radius=20

注意:

在下面的网址中,我们有3个参数(lat,lng和radius)。我希望半径值等于1(1 km)。因此,当用户打开(http://localhost:3000/markers?lat=11.111111&lng=104.1010101)时,它将获得radius = 1(http://localhost:3000/markers?lat=11.111111&lng=104.1010101&radius=1)的默认值。

2 个答案:

答案 0 :(得分:2)

您可以使用fetch

Marker.nearby(params[:lat], params[:lng], params.fetch(:radius, 1))

答案 1 :(得分:2)

我建议在模型方法中设置radius的默认值。即使您从控制台运行它或不使用请求参数,这也可确保一致的行为。

def self.nearby(lat, lng, radius)
  approved.near([lat.to_f, lng.to_f], radius || 1, units: :km)
end

然后Marker.nearby(11.111, 104.010101, nil)应该将radius值设置为1.请注意,这仅在radius为nil时才有效,对于空字符串将失败。如果这是一个问题,你应该检查礼物?像:

def self.nearby(lat, lng, radius)
  radius = radius.present? ? radius : 1
  approved.near([lat.to_f, lng.to_f], radius, units: :km)
end
相关问题