2015-10-03 1 views
0

Je construis une application rails qui héberge des jeux. Les jeux appartiennent à des catégories et ainsi chaque catégorie peut avoir beaucoup de jeux.En utilisant la gemme Friendly ID avec Rails, comment régénérer le champ slug?

J'utilise la pierre précieuse Friendly_id pour générer les limaces URL et ont la configuration suivante:

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 %> 

Le problème est que lorsque j'utilise le module slugged de Friendly_id, Rails est la génération de mes urls sans le « -Jeux » suffixe si je me retrouve avec URLS comme celui-ci:

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

Y a-t-il un moyen d'avoir des «jeux» dans mes URL et de les faire bien jouer de sorte que les «jeux» soient supprimés au moment du traitement dans le modèle?

Merci.

+0

On dirait que la gemme has_permalinks fait un meilleur travail de résoudre ce scénario que Friendly_id ne. Cependant, ce serait bien de travailler avec Friendly_id car il semble être l'option la mieux prise en charge et il a aussi un peu plus de fonctionnalités que j'aimerais exploiter. – dnyce

Répondre

0

Il s'avère que le problème n'était pas que Friendly_id n'effectuait pas la mise à jour mais que le slug n'était pas actualisé.

J'ai dû faire un saut dans la console Rails et mettre manuellement la colonne "slug" à zéro pour chaque catégorie. Une fois cela fait, Friendly_id réinitialise la colonne "slug" pour refléter mon texte supplémentaire.

0

Il est donc:

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