创建一个link_to到一个用slug标识的对象

时间:2016-02-11 08:24:46

标签: ruby-on-rails-4

在rails 4.2应用程序中,虚荣URL用于某些模型,并在控制器中调用:

@staticpage = Staticpage.find_by_slug!(params[:id])

但是,创建link_to的各种尝试都失败了。例如:

<%= link_to 'this', staticpage_url(33, locale: I18n.locale.to_s) %>

因为这会生成一个查找id的链接,而不是slug。

如何在确保语言环境得到尊重的同时在link_to语句中调用slug? slug未本地化

1 个答案:

答案 0 :(得分:1)

您最好使用friendly_id gem:

#app/models/staticpage.rb
class Staticpage < ActiveRecord::Base
  extend FriendlyId
  friendly_id :param, use: [:finders, :slugged]
end

这会自动将slug插入link_topath helper方法,覆盖.find以使用slug ...

<% Staticpage.all.each do |page| %>
  <%= link_to "x", page %>
<% end %>

def show
  @page = Staticpage.find params[:id] #-> finds by slug
end