我有一个包含城市的应用。我正在寻找一些关于如何RESTful构建控制器的建议,以便我可以通过AJAX请求查找,初始化和创建城市记录。例如:
city_name
现在,我的第一种方法是将创建操作更改为使用find_or_create
,以便向cities_path
发送AJAX帖子将导致返回现有城市或创建并返回它。
这样可行......但是,设置控制器操作会更好,这些操作会接受字符串输入,查找或初始化并返回,然后仅在用户确认生成的记录正确时才创建。理想的情况是将这一切都放在一个动作中,因此AJAX请求可以转到该URL,服务器响应JSON对象,javascript可以从那里处理事情。我想保留所有用户交互逻辑客户端,并最大限度地减少实现此目的所需的请求数。
有关最干净,最RESTful方式的任何建议吗?
答案 0 :(得分:0)
一种选择是利用存在?方法:
if City.exists?(:name=>params[:city])
@city = City.find_by_name(params[:city])
else
@city = City.new(:name=>params[:city])
end
根据评论更新:
#show = /city/:id, :id can be int or string
def show
if params[:id].to_i > 0
@city = City.find(params[:id])
elsif City.exists?(:name=>params[:id])
@city = City.find_by_name(params[:id])
else
return redirect_to(:action=>:new, :name=>params[:id])
end
end
def new
@city = City.new(params[:name])
end