如何在rails4中的资源路由末尾附加唯一字符串

时间:2013-07-17 12:02:03

标签: ruby-on-rails ruby-on-rails-4 rails-routing

我尝试过rails guide并搜索了很多,但可以找到答案。 我正在尝试使用脚手架生成器在轨道4中生成秘密的支柱脚手架

场景是:用户可以创建秘密帖子,他们将获得带有秘密令牌的链接 将来它可以作为验证字符串

rails g scaffold secret title:string content:text token:string

我想在所有“secret_posts”路由中附加该标记值

例如:

: secret/1/sadkljaldjlak 

: secret/1/edit/sasadadallkha


我想将该令牌用作验证的唯一代码。 任何帮助表示赞赏

2 个答案:

答案 0 :(得分:0)

您应该可以通过单独指定路径来完成此操作:

 get 'secret/:id/:token' => 'secret#show' #or whatever action

在该控制器操作中,您可以确保令牌与ID匹配。

但您应该知道这不安全,该网址将存储在浏览器历史记录中,并且如果该网页包含外部链接,其他网站也会显示该网址

答案 1 :(得分:0)

首先,创建向机会令牌的迁移:字符串到令牌:文本,然后使用SecureRamdom.urlsafe_base64生成令牌,在您的模型上使用此代码:

def secret_token
   if self.new_record?
     self.token = SecureRandom.urlsafe_base64
   end
end

之后,你可以创建一个这样的路线:

get   'secret/:edit_hash/edit',        to: 'secret#edit', as: :secret_offer
patch 'secret/:edit_hash',             to: 'secret#update'
put   'secret/:edit_hash',             to: 'secret#update'

并在您的控制器上:

def edit
  @secret = Secret.find_by!(edit_hash: params[:edit_hash])
  your code..
end

def create
  @secret = Secret.find_by!(edit_hash: params[:edit_hash])
  your code..
end

希望这个帮助