使用 Friendly ID gem 和 Rails,如何重新生成 slug 字段?
Using the Friendly ID gem with Rails, how do you regenerate the slug field?
我正在构建一个托管游戏的 rails 应用程序。游戏属于类别,因此每个类别可以有很多游戏。
我正在使用 Friendly_id gem 生成 URL slug 并进行以下设置:
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,所以我最终得到 URLS 之类的这个:
http://localhost:3000/action
http://localhost:3000/adventure
有没有什么方法可以让 rails 在我的 URL 中保留“-games”,并让它们都能正常运行,以便在需要时删除“-games”在模型中处理?
谢谢。
原来问题不是 Friendly_id 不会进行更新,而是 slug 没有得到刷新。
我不得不进入 Rails 控制台并手动将每个类别的 "slug" 列设置为 nil。完成此操作后,Friendly_id 重置 "slug" 列以反映我的附加文本。
所以是:
User.find_each{ |i| i.slug = nil; i.save!; }
我正在构建一个托管游戏的 rails 应用程序。游戏属于类别,因此每个类别可以有很多游戏。
我正在使用 Friendly_id gem 生成 URL slug 并进行以下设置:
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,所以我最终得到 URLS 之类的这个:
http://localhost:3000/action
http://localhost:3000/adventure
有没有什么方法可以让 rails 在我的 URL 中保留“-games”,并让它们都能正常运行,以便在需要时删除“-games”在模型中处理?
谢谢。
原来问题不是 Friendly_id 不会进行更新,而是 slug 没有得到刷新。
我不得不进入 Rails 控制台并手动将每个类别的 "slug" 列设置为 nil。完成此操作后,Friendly_id 重置 "slug" 列以反映我的附加文本。
所以是:
User.find_each{ |i| i.slug = nil; i.save!; }