【问题标题】:Friendly_ID Ruby on RailsFriendly_ID Ruby on Rails
【发布时间】:2013-02-15 10:47:18
【问题描述】:

即使在使用 slug 之后,URL 仍然显示 id 而不是标题。 代码如下

index.html.erb

<title>Blog!</title>
<h1>List of the Posts</h1>
<% @posts.each do |post| %>
  <%= link_to post.title,:id => post.slug%>
  <p><%= post.content %></p>
  <%= link_to "Edit",edit_post_path(post) %> |
  <%= link_to "Delete",post,:confirm=>"Are you sure ?",:method=>:delete %>
  <hr />
<% end %>
<p><%= link_to "Add a New Post",new_post_path %></p>

posts_controller.rb

class PostsController < ApplicationController
  def index
    @posts=Post.all
  end

  def show
    @posts=Post.find(params[:id])
  end

结束

后模型

  extend FriendlyId
  friendly_id :title,use: :slugged

  def should_generate_new_friendly_id?
    new_record
  end

routes.rb

Blog::Application.routes.draw do
  get "blog/posts"
  resources :posts
end

我希望链接是 'localhost:8080/posts/this+is+the+title' 而不是 'localhost:8080/posts/2'

【问题讨论】:

  • 是格式错误还是您在控制器中执行extend 等?

标签: ruby-on-rails-3 friendly-id


【解决方案1】:

我也遇到了这个问题。当我链接到我的资源的显示操作时,我会在 url 中获得 id 而不是我的 slug。尽管我可以输入 slugged url 并且它也可以正常工作(我只是无法链接到 slugged url)。事实证明,我必须使用命名路由助手来为 friendly_id 显示 url 中的 slug(我在我的 link_to 助手中使用了老式的 controller: 'posts', action: 'show', id: post.id)。在你的情况下,我会尝试改变:

<%= link_to post.title, :id => post.slug %>

<%= link_to post.title, post_path(post) %>

此外,friendly_id 版本 5.0 要求您在控制器中将 Model.find 更改为 Model.friendly.find(除非您明确覆盖它 config/initializers/friendly_id.rb。由于这是一篇较旧的帖子,它可能不适用于您,但我想我无论如何都会添加它。尝试更改:

def show
  @post = Post.find(params[:id])
end

def show
  @post = Post.friendly.find(params[:id])
end

希望有帮助!

【讨论】:

  • 遇到同样的问题...如果您手动输入 slugs 可以工作,但如果您点击链接,id 仍然会显示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-15
  • 2015-03-02
  • 2016-10-09
  • 2011-04-18
相关资源
最近更新 更多