URLs amigáveis ​​no Rails

Entediado com yoursite.com/articles/1</code> default URLs in Rails? Want something like yoursite.com/articles/obama-re-elected</code>? Here's a workaround.

Nota : Unicode aplicado. Isso significa um título deobama-đắc-cử</code> will have the result as /articles/obama-dac-cu</code>.

1. Coloque isso em seu Gemfile</code>:

gem "stringex", "~> 1.4.0"

2. Coloque isso em seu Model.rb</code>:

acts_as_url :name, url_attribute: :slug
def to_param
slug

end

Isso converterá seu atributo: name em seu modelo em um URL amigável e o colocará em: slug

Bem no início do seu Model.rb</code>, put this if you're using Unicode titles:

# encoding: UTF-8

3. Em seguida, precisamos migrar: slug em nosso modelo atual

rails g migration AddSlugToModel slug:string
rake db
:migrate

4. Em seu controlador, substitua: Model.find(params[:id])</code> with Model.findbyslug(params[:id])</code>

Compatível com Active Admin

to_param substituirá a configuração do Admin ativo, então você pode precisar adicionar este ajuste ao seu app/admin/YourModel.rb</code>:

around_filter do |controller, action|
MyModel.class_eval do
alias :__active_admin_to_param :to_param
def to_param() id.to_s end
end

begin
action
.call
ensure
MyModel.class_eval do
alias :to_param :__active_admin_to_param
end
end
end

Lembre-se de substituir MyModel pelo nome do seu modelo.

  • Tu qio.me/rebyn

PS: Eu sei, Markdown em Coderwall é uma merda.