在Rails中使用Friendly ID gem,如何重新生成slug字段?

时间:2015-10-03 23:22:17

标签: ruby-on-rails-4 seo friendly-id

我正在构建一个托管游戏的rails应用程序。游戏属于类别,因此每个类别可以有许多游戏。

我正在使用Friendly_id gem生成URL slugs并进行以下设置:

Category.rb

 class Category < ActiveRecord::Base
  extend FriendlyId
  friendly_id :name_and_games, use: [:slugged]

  has_many :games

  def name_and_games
    "#{name}-games"
  end
end

Games_Controller.rb

...
      def category
    @category = Category.friendly.find(params[:id])
    @categories = Category.all
    @games = @category.games.page(params[:page])

    render 'games/index'
  end
...

的routes.rb

get ':friendly_id', to: "games#category", as: :category

Category_View.html.erb

<% categories.each do |category| %>
  <%= link_to category_path(category) do %>
    <span><%= pluralize(category.name.capitalize, "Game") %> (<%= category.games.count %>)</span>
  <% end %>
<% end %>

问题在于,当我使用Friendly_id的slugged模块时,Rails正在生成没有“-games”后缀的URL,所以我最终得到这样的URL:

http://localhost:3000/action
http://localhost:3000/adventure

有没有办法让rails在我的网址中保留“-games”并让它们都能很好地播放,以便在模型中处理时删除“-games”?

谢谢。

2 个答案:

答案 0 :(得分:0)

原来问题不在于,Friendly_id不会进行更新,但是slug没有刷新。

我不得不进入Rails控制台并为每个类别手动设置“slug”列为nil。一旦我这样做,Friendly_id重置“slug”列以反映我的附加文本。

答案 1 :(得分:0)

所以它是:

User.find_each{ |i| i.slug = nil; i.save!; }