Ruby on rails 4 Rails 4在创建时动态生成一个额外的面向公众的URL

Ruby on rails 4 Rails 4在创建时动态生成一个额外的面向公众的URL,ruby-on-rails-4,routes,Ruby On Rails 4,Routes,我有一个Rails应用程序,在每个项目中存储库存照片。创建项目时,我希望应用程序不仅为我们将在内部查看的项目创建url,即projects#show,即/projects/4,而且我还希望它创建另一个url,我们可以向客户端显示该url,这将略有不同。它将允许用户批准照片等。我希望url类似于/projects/st53d,其中url的结尾将是一个随机数,由random\u string=SecureRandom.urlsafe\u base64(5) 这样,我可以将此url传递给客户,他们可以

我有一个Rails应用程序,在每个项目中存储库存照片。创建项目时,我希望应用程序不仅为我们将在内部查看的项目创建url,即
projects#show
,即
/projects/4
,而且我还希望它创建另一个url,我们可以向客户端显示该url,这将略有不同。它将允许用户批准照片等。我希望url类似于
/projects/st53d
,其中url的结尾将是一个随机数,由
random\u string=SecureRandom.urlsafe\u base64(5)

这样,我可以将此url传递给客户,他们可以查看项目中的所有照片,并批准他们希望我们使用的照片,但不能更改或查看标准产品展示页面上的其他内部内容

目前,我已经在
项目
模型中添加了一个
客户url
列,我正在考虑在
项目#create
方法中生成随机数,然后将其保存到项目的
客户url
列中。通过这种方式,我可以循环浏览所有客户端URL,并确保我没有生成重复的URL。但是我不知道如何创建路由部分

我还没有做我检查它是否是随机的部分,但我知道如何做,只是没有路线创建

我想我需要创建一个新方法,我将其命名为
show\u client
,并在我的
config/routes.rb
文件中为其创建一个路由

class ProjectsController < ApplicationController
before_action :authenticate_user!, only: [:show,:index]

def create 
    @project = Project.create(project_params)
    @project.creator = current_user.email

    require 'securerandom'
    random_string = SecureRandom.urlsafe_base64(5)
    @project.client_url = random_string
    @project.save

    redirect_to @project
end

def show_client
    @project = Project.find(params[:id])
    @photos  = @project.photos
end
class ProjectsController
这似乎更像是一个角色问题。你可以去看看像坎坎坎这样的地方。如果您只需要两种类型的用户,还可以向用户表中添加一个用于admin的布尔列。url扩展在您的问题范围内似乎并不重要。如果要使用其他视图访问“用户显示”页面,请在“显示”操作中选择以下内容:

unless current_user.admin?
  redirect_to client_show(current_user.id)
end

我能弄明白。 我在数据库中创建了
client\u url
列,在创建项目时,在
projects\u controller
create
方法中,我生成了一个随机的base64数字,并将其分配给
project.client\u url

routes.rb中
我做了:

get 'projects/clients/:client_id' => 'projects#clients', as: 'projects_client'
在我的
项目中\u controller.rb

def clients
    @project = Project.where(client_id: params[:client_id])
end
那么到该路由的链接是:

<%= link_to 'Client Version', projects_client_path(@project.client_url)  %>


客户端将不会登录或类似的操作。不确定我们是否可以给他们一个角色,而不让他们创建一个不可能的帐户。这在技术上是可能的,但老板们不希望这样。我们的登录名是google OAuth,它被限制在一个特定的域电子邮件地址,如果没有任何人的身份验证,并且页面是可编辑的…什么会阻止他们更改他们选择的任何页面?通过google,我们的特定工作电子邮件的用户有身份验证。如果没有登录,除了主页,任何人都无法查看任何页面。我使用Desive和omniauth-google-2I能够找到答案,并在你好奇的情况下发布答案。