Ruby on rails 已存在静态标题的动态seo url

Ruby on rails 已存在静态标题的动态seo url,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我有多个表,其中有100行,其中有一个名称字段。名称字段的内容类似于 一些名字 我当前的网址是 http://localhost:3000/posts/show/2 如何将其转换为 http://localhost:3000/some-名称 对于动态插入数据,我使用了友好的url gem这很好。您可能想看看 以下是相关的 然而,这会给你像localhost:3000/posts/some name这样的URL 如果要消除POST路径,可能必须修改路由才能做到这一点 根据评论更新 您必须创建一个迁

我有多个表,其中有100行,其中有一个名称字段。名称字段的内容类似于
一些名字

我当前的网址是

http://localhost:3000/posts/show/2

如何将其转换为

http://localhost:3000/some-名称


对于动态插入数据,我使用了
友好的url gem
这很好。

您可能想看看

以下是相关的

然而,这会给你像localhost:3000/posts/some name这样的URL 如果要消除POST路径,可能必须修改路由才能做到这一点

根据评论更新

您必须创建一个迁移<代码>rails g迁移将_slug _添加到_postsslug:string

class AddSlugToPosts < ActiveRecord::Migration
  def change
    add_column :posts, :slug, :string
    add_index :posts, :slug
  end
end
类AddSlugToPosts可以转换为http:localhost:3000/某些名称。 你必须这样做:

get ":row-name" => 'controller#actoin_name', :as => 'row_name'
resources:rows , :except=> [:show]
 get rows/:row_name => 'rows#show' 
并将其放置在路由文件的末尾,以便在此路由上不会捕获任何其他操作。在控制器操作中,您需要执行以下操作:

@row = Row.find(params[:row_name])
但这对rails来说不是一个好主意。您应该像这样映射url:

get ":row-name" => 'controller#actoin_name', :as => 'row_name'
resources:rows , :except=> [:show]
 get rows/:row_name => 'rows#show' 

我在我提到的
友好id gem
上工作过。这个gem的工作原理是在数据库中插入slug,但我没有slug,我需要使用name创建它,而不创建任何slug。原因是我已经有很多记录了。如果你已经有很多记录,这并不重要。正如railscast所提到的,即使您已经有了现有的记录(比如帖子),您也只需要重新保存它们来生成slug。您可以在rails控制台中这样做
Post.find_each(&:save)
这将为现有帖子生成slug。好的,我有一个子类别表,它有
name
列,并且包含
some name
如何将slug添加到此表中,以及如何在
link_
中添加slug,也可以尝试参数化方法,如“John Smith”。参数化=>“John Smith”。这将是获得好的URL的一个步骤。您还可以查找那些在参数化后与您要查找的行名称相同的行名称,这需要将它们全部选中。我将从hash=hash[MyModel.pluck(:title,:id)]开始,然后是hash=hash[hash.map{k,v{k.parameterie,v]}。这将为您提供一个很好的哈希,其中包含很好的URL以及它们所属的行id。