3

我有一个包含城市的应用程序。我正在寻找一些关于如何以 REST 方式构建控制器的建议,以便我可以通过 AJAX 请求查找、初始化和创建城市记录。例如:

  • 给定一个文本字段city_name
  • 用户输入城市名称,例如“Paris, France”
  • 该应用程序检查此位置以查看数据库中是否已经存在这样的城市
  • 如果有,则返回城市对象
  • 如果没有,则返回一个新记录,初始化名称为“Paris”,国家为“France”,并提示用户确认是否要将这个城市添加到数据库中
  • 如果用户说“是”,则保存记录。如果不是,则丢弃该记录并清除该表格。

现在,我的第一个方法是将 Create 操作更改为 use find_or_create,以便 AJAX 发布到cities_path将导致返回现有城市或创建它并返回它。

没问题...但是,最好设置控制器操作,该操作将接受字符串输入、查找或初始化并返回,然后仅在用户确认生成的记录正确时才创建。理想的情况是把这一切都放在一个动作中,这样 AJAX 请求就可以转到那个 url,服务器用 JSON 对象响应,而 javascript 可以从那里处理事情。我想保留所有用户交互逻辑客户端,并尽量减少实现这一目标所需的请求数量。

关于最干净、最 RESTful 的方式来完成此任务的任何建议?

4

1 回答 1

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
于 2012-04-15T23:33:47.673 回答