这些是我的Sinatra路线。他们将商店名称作为ActiveRecord类传递,并使用我的帮助程序执行所需的params。
def self.get_or_post(url,&block)
get(url,&block)
post(url,&block)
end
get_or_post "/read" do
jsonp(read(params[:store].constantize, params))
end
get_or_post "/create" do
jsonp(create(params[:store].constantize, params))
end
get_or_post "/update" do
jsonp(update(params[:store].constantize, params))
end
get_or_post "/destroy" do
jsonp(destroy(params[:store].constantize, params))
end
在我看来,这可以让DRYer做类似的事情:
case route
when read, create, update, destroy
jsonp(method(route).call(params[:store].constantize, params))
else
# neglect or give error
end
如何获取此路径变量,我使用method(route).call
是否正确?
答案 0 :(得分:1)
怎么样:
%w(read create update destroy).each do |action|
[:get, :post].each do |method|
send(method, "/#{action}") do
jsonp(send(action, params[:store].constantize, params))
end
end
end