2013-02-15 161 views
2

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

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 

我想链接是 '本地主机:8080 /职位/这是+的+标题' 而不是'本地主机:8080 /帖子/ 2'

+0

它是不好的格式,或者你在你的控制器中做'extend'等吗? – pduersteler 2013-02-15 10:55:30

回答

1

我也遇到过这个问题。当我链接到我的资源的显示操作时,我会在URL中获取id而不是我的slu。。尽管我可以输入slugged网址,但它也可以正常工作(我只是无法链接到slugged网址)。事实证明,我不得不使用命名的路由帮助器friendly_id来显示网址中的slu((我在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.findModel.friendly.find(除非你明确地覆盖它config/initializers/friendly_id.rb由于这是。一个老帖子,可能并不适用于你,但我想我反正它添加尝试改变:

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

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

希望有帮助!

+1

有这个相同的问题......如果你手动输入它们,slu work将会工作,但是如果你点击一个链接,这个ID仍然会显示出来。 – 2014-10-06 17:53:31