gpt4 book ai didi

ruby-on-rails - Ruby on Rails URL 格式

转载 作者:数据小太阳 更新时间:2023-10-29 07:02:15 28 4
gpt4 key购买 nike

我有一个 Ruby on Rails 应用程序,您可以在其中创建“帖子”。我开始使用脚手架生成器来生成标题(字符串)和正文(内容)。

每个“帖子”都有一个 id 的 url,例如/1、/2、/3 等。

有没有办法将其更改为一串随机字符,例如/49sl、/l9sl 等?

更新

这是我为 posts_controller.rb

准备的
class PostsController < ApplicationController
# GET /posts
# GET /posts.json
def index
@posts = Post.all

respond_to do |format|
format.html # index.html.erb
format.json { render json: @posts }
end
end

# GET /posts/1
# GET /posts/1.json
def show
@post = Post.find(params[:id])

respond_to do |format|
format.html # show.html.erb
format.json { render json: @post }
end
end

# GET /posts/new
# GET /posts/new.json
def new
@post = Post.new

respond_to do |format|
format.html # new.html.erb
format.json { render json: @post }
end
end

# GET /posts/1/edit
def edit
@post = Post.find(params[:id])
end

# POST /posts
# POST /posts.json
def create
@post = Post.new(params[:post])

respond_to do |format|
if @post.save
format.html { redirect_to @post, notice: 'Post was successfully created.' }
format.json { render json: @post, status: :created, location: @post }
else
format.html { render action: "new" }
format.json { render json: @post.errors, status: :unprocessable_entity }
end
end
end

# PUT /posts/1
# PUT /posts/1.json
def update
@post = Post.find(params[:id])

respond_to do |format|
if @post.update_attributes(params[:post])
format.html { redirect_to @post, notice: 'Post was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: "edit" }
format.json { render json: @post.errors, status: :unprocessable_entity }
end
end
end

# DELETE /posts/1
# DELETE /posts/1.json
def destroy
@post = Post.find(params[:id])
@post.destroy

respond_to do |format|
format.html { redirect_to posts_url }
format.json { head :no_content }
end
end
end

最佳答案

Rails 使用 ActiveRecord 对象的 to_param 方法将其解析为 URL。

假设您有办法生成这些唯一 ID(将其称为 IdGenerator),您可以执行以下操作:

1- 每当您持久化一个 Post 对象并将其保存到数据库时生成此 ID,假设在 url_id 列下

class Post < ActiveRecord::Base
before_create :generate_url_id
def generate_url_id
self.url_id = IdGenerator.generate_id
end
end

2- 在您的 Post 模型中覆盖 to_param 方法:

class Post < ActiveRecord::Base
def to_param
return url_id
end
end

现在 post_path(@post) 将解析为/posts/url_id

顺便说一句,您可以使用SecureRandom.urlsafe_base64look here如果您还没有 ID 生成器。

阅读有关 documentation for to_param 的更多信息.

关于ruby-on-rails - Ruby on Rails URL 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13454829/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com