ruby-on-rails - Rails : RESTful Find, 初始化或创建

标签 ruby-on-rails ajax rest

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

  • 给定一个文本字段city_name
  • 用户输入城市名称,例如“法国巴黎”
  • 应用会检查此位置以查看数据库中是否已存在这样的城市
  • 如果有,则返回城市对象
  • 如果没有,它会返回一条以名称“巴黎”和国家“法国”初始化的新记录,并提示用户确认是否要将这个城市添加到数据库中
  • 如果用户说"is",则记录将被保存。如果没有,记录将被丢弃并清除表单。

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

这工作正常...但是,最好设置 Controller 操作,该操作将接受字符串输入, find ,或者初始化并返回,然后仅在用户确认生成的记录正确时才创建。理想的情况是将这一切放在一个操作中,以便 AJAX 请求可以转到该 url,服务器以 JSON 对象进行响应,而 javascript 可以从那里处理事情。我希望保留所有用户交互逻辑客户端,并最大限度地减少实现此目的所需的请求数量。

有什么关于最干净、最 RESTful 的方式来实现这一目标的建议吗?

最佳答案

一种选择是利用存在?方法:

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

关于ruby-on-rails - Rails : RESTful Find, 初始化或创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10167075/

相关文章:

ruby-on-rails - Rails - 共享数据库和模型

ruby-on-rails - Angular 依赖注入(inject) - @Injectable() 在测试中失败,而 @Inject() 有效

ruby-on-rails - Rails 3 路由和格式特异性

javascript - 表单标签过早关闭

javascript - MVC4 ajax调用并正确返回数据

java - Json 输出生成双引号中的数字,如字符串

java - 如何在eclipse下在glassfish上部署REST服务?

javascript - Uncaught ReferenceError : ReactDOM is not defined

javascript - 为什么使用 jQuery 缓存 AJAX?

c# - 是否可以使用带符号的 REST url 参数?