如何生成唯一ID然后将其设为URL?

时间:2011-06-08 20:58:12

标签: ruby-on-rails ruby-on-rails-3

这是etherPad工作流程:

load http://ietherpad.com
click 'new pad' which takes you here: http://ietherpad.com/ep/pad/newpad

然后重定向到这样的事情:

http://ietherpad.com/1vcs1YUf1Z

如何在rails中执行此操作?

  1. 让我的rails controller new方法生成一个UID,然后重定向
  2. 让我的rails路由以某种方式在第一个之后使用那个uID来找到正确的记录并路由到控制器中正确的Pad Show方法?
  3. 由于

1 个答案:

答案 0 :(得分:1)

绝对最简单的方法是:

在模型中,有一个回调

class Thing < AR::Base
   # assuming you have a slug field
   before_create :generate_slug

   private 
   def generate_slug
     self.slug = some_uid_algorithm
   end       

end

然后在控制器中,使用编辑操作。使用动态查找器find_by_slug并接受id参数。如果找到则返回记录,如果未找到则返回nil。如果找不到,请调用create获取一个新的,调用你的slug回调。

def edit
  @thing = Thing.find_by_slug(params[:id]) || Thing.create!
end

将此路线指向您控制器的编辑操作。在开始创建记录之前,您可能需要一种更健壮的方法来确定有效的slug,但这实质上就是“wiki”的工作方式。

这最终可能会创建一堆垃圾记录,因此您需要一种方法来扫描这些记录。某种状态如“待处理”或“未保存”会处理这种情况 - 当用户更新记录时,将状态从“未保存”更改为“已保存”,然后扫描任何30天前未保存的文档或东西。

听起来怎么样?