首页 > 解决方案 > 如何从表单创建重定向 URL

问题描述

用户有一个列表。例如,用户 1 有清单 2。当前 URL 将如下所示:

http://localhost:3000/listings/2

我想让用户为他们的列表自定义他们自己的反向链接,如下所示:

http://localhost:3000/uniquelistingname

理想情况下,我希望列表 URL 保持唯一,但重定向就可以了。

我找到了友好的 URL gem,但我不确定它是否完全符合我的需要。它似乎允许 URL 作为参数,而不是创建一个完全自定义的参数,它需要是唯一的。你对我应该如何处理这件事有什么建议?

标签: ruby-on-rails

解决方案


一种选择是为其创建单独的模型,例如命名UserListingLink如下:

class UserListingLink < ApplicationRecord
  belongs_to :user
  belongs_to :listing

  validates :link, uniqueness: true
end

并且只允许用户编辑它。然后你可以在路由中重定向你的用户(把它放在最底部,这样其他路由,比如 localhost:3000/posts 继续工作):

路线.rb:

get '/:user_link', to: 'user_listings#show'

并在该控制器中重定向或显示您想要的任何内容:

class UserListingsController < ApplicationController
  def show
    listing = UserListingLink.find_by(link: params[:user_link]).listing
    redirect_to listings_path(listing)
  end
end

推荐阅读