我想分享一些控制器方法。在 ruby on Rails 中执行此操作的最佳实践是什么?我应该创建一个控制器扩展的抽象类,还是应该创建模块并将其添加到每个控制器中?下面是我想分享的控制器方法:
def driving_directions
@address_to = params[:address_to]
@address_from = params[:address_from]
@map_center = params[:map_center_start]
# if we were not given a center point to start our map on
# let's create one.
if !@map_center && @address_to
@map_center = GeoKit::Geocoders::MultiGeocoder.geocode(@address_to).ll
elsif !@map_center && @address_from
@map_center = GeoKit::Geocoders::MultiGeocoder.geocode(@address_from).ll
end
end
def printer_friendly
starting_point = params[:starting_point].split(',').collect{|e|e.to_f}
ne = params[:ne].split(',').collect{|e|e.to_f}
sw = params[:sw].split(',').collect{|e|e.to_f}
size = params[:size].split(',').collect{|e|e.to_f}
address = params[:address]
@markers = retrieve_points(ne,sw,size,false)
@map = initialize_map([[sw[0],sw[1]],[ne[0],ne[1]]],[starting_point[0],starting_point[1]],false,@markers,true)
@address_string = address
end
在我看来,正常的 OO 设计原则适用:
- 如果代码确实是一组不需要访问对象状态的实用程序,我会考虑将其放在一个模块中单独调用。例如,如果代码都是映射实用程序,则创建一个模块
Maps
,并访问以下方法:Maps::driving_directions
.
- 如果代码需要状态并且已在或可以在每个控制器中使用,请将代码放入 ApplicationController 中。
- 如果代码需要状态并且在逻辑上密切相关的所有控制器的子集中使用(即所有关于映射),则创建一个基类(
class MapController < ApplicationController
)并将共享代码放在那里。
- 如果代码需要状态并且在所有关系不太密切的控制器的子集中使用,请将其放入模块中并将其包含在必要的控制器中。
在你的情况下,这些方法需要状态(params
),所以选择取决于需要它的控制器之间的逻辑关系。
此外:
Also:
- 如果可能,请对重复代码使用部分代码,并将其放置在公共“部分”目录中或通过特定路径包含。
- 尽可能坚持 RESTful 方法(对于方法),如果您发现自己创建了很多非 RESTful 方法,请考虑将它们提取到自己的控制器中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)