Ruby on Rails的URL格式

19 浏览
0 Comments

Ruby on Rails的URL格式

我有一个 Ruby on Rails 应用程序,你可以在其中创建“帖子”。我最初使用脚手架生成器来生成标题和内容。每个“帖子”的url都是其 ID,例如/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

admin 更改状态以发布 2023年5月23日
0
0 Comments

我希望这两个资源能够帮到你:

  1. 那就是名叫obfuscate_id的gem。它以以下类似格式表示ID:

    http://tennisfans.eu/products/4656446465

  2. 另一个gem——masked_id,提供了类似的功能。您可以通过在类中定义创建URL的格式来控制它。从源代码看,这个gem似乎使用了obfuscate_id gem的策略。

0
0 Comments

Rails使用ActiveRecord对象的to_param方法将其解析为URL。\n假设您有一种方法来生成这些唯一的ID(将其称为IdGenerator),您可以执行以下操作:\n1- 每当您持久化一个Post对象并将其保存到数据库中时,生成此ID,假设它在url_id列下。\n

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

\n2- 在您的Post model中覆盖to_param方法:\n

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

\n现在post_path(@post)将解析为/posts/url_id。\n顺便说一句,如果您还没有ID生成器,可以使用SecureRandom.urlsafe_base64或查看此处。\n在to_param文档中阅读更多信息。

0