我創建的模型對象從產生的支架,但現在我想的,而不是鏈接到
/:控制器/:ID(/對象名/ 1)/ :controller /:title(/ objectname/new_blog_post)。我如何做到這一點,以便鏈接將鏈接到標題,而不是ID?Ruby on Rails的:URL從IDS到名稱/職稱等
我想從去:
/:controller/:id
到
/:controller/:name
我創建的模型對象從產生的支架,但現在我想的,而不是鏈接到
/:控制器/:ID(/對象名/ 1)/ :controller /:title(/ objectname/new_blog_post)。我如何做到這一點,以便鏈接將鏈接到標題,而不是ID?Ruby on Rails的:URL從IDS到名稱/職稱等
我想從去:
/:controller/:id
到
/:controller/:name
使用PARAM
class User < ActiveRecord::Base
def to_param
name.blank? ? id : name
end
end
或者尋找到一個插件,acts_as_sluggable和friendly_id是那些我所知道的。
編輯:哦,是的,並提到您確認任何你使用是獨一無二的。
編輯:之後你
<% @users.each do |user| %>
<%= link_to user.name, user_path(@user.id) %>
<% end %>
而且如果用戶名是約翰那麼它將使/用戶/約翰:
它的工作,如:
class UsersController < ActionController::Base
def index
@users = User.all
end
end
鑑於點擊該鏈接
你需要改變一些東西:
你必須在title
屬性傳遞給任何路徑/ URL時,你做的東西一樣link_to
例如
post_path(@post)
將成爲
post_path(@post.title)
您還可以更新您的發現,尋找通過標題的帖子,而不是ID例如
@post = Post.find(params[:id])
將成爲
@post = Post.find_by_title(params[:title])
這應該讓你開始:)。您顯然想要扼殺標題並驗證標題的唯一性。
編輯:閱讀羅伯特·埃爾韋爾的回答之後,也許我誤解了這個問題。你是否已經有了一種類似於你描述的特定對象的路線,或者你是否正在用「基本」路線來做這件事?如果是後者,你可以更好地寫出像羅伯特所建議的自定義路線,然後做一些我建議的東西。
使用friendly_id。
BTW,產生的URL是不是爲我工作。我已經寫了我自己的模型
def to_param
self.friendly_id
end
+1你知道,我從來沒有重寫'to_param'。也許我應該開始這樣做。 – theIV
其實,再看一遍,這會是一個好主意嗎?如果名字是空白的,他的發現在控制器中會是什麼樣子? – theIV
它仍然可以找到一個id,如果沒有名字,檢查它是否將id作爲url。它沒有經過測試,但它展示了它的一個基本想法。 – nitecoder