我有一个包含城市的应用程序。我正在寻找一些关于如何以 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/