Ruby on rails 4 Rails 4在创建时动态生成一个额外的面向公众的URL
我有一个Rails应用程序,在每个项目中存储库存照片。创建项目时,我希望应用程序不仅为我们将在内部查看的项目创建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传递给客户,他们可以
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能够找到答案,并在你好奇的情况下发布答案。