我有一個RoR應用程序。而在應用程序用戶可以創建帖子。我通過resources :posts
連接了我的routes.rb
中的Posts表。現在 - 鏈接到創建的帖子看起來像:http://mysitename.com/posts/1
(其中1是帖子號碼)。Rails,如何更改自動生成的鏈接
我想要做的是讓rails生成鏈接到帖子。所以用戶沒有看到我的數據庫中有多少帖子。結果它看起來像http://mysitename.com/post/generatedlink
。它必須生成,例如帖子主題。
首先,我們必須在Posts表中創建link
列。並使其產生類似的東西:
@post.link = @post.theme.parameterize.underscore
但我不明白,在哪裏把這段代碼。
而接下來的問題是:「如何替換post/1
爲@post.link
?」
希望,我讓自己清楚。如果您說我可以提供信息,那麼需要解決我的問題。
UPDATE
我@SteveTurczyn提醒後做了什麼。
我創建了一個新列,名爲random_link
,作爲string
。
我沒有碰我的routes.rb
:
resources :posts
我post.rb
(post模型)是這樣的:
after_validation :add_link
def add_link
self.random_link = self.theme.to_slug_param
# to_slug_param it's a gem for translating from other language into english
end
def to_param
random_link
end
我沒有找到方法。我posts_controller.rb
這個樣子的:
def show
@post = Post.find_by_random_link(params[:id])
right_menu_posts
random_link_to_other_post(@post)
end
private
def random_link_to_other_post(post)
random_post = Post.where.not(id: post.id)
@random_post = random_post.sort_by {rand}.first
end
def right_menu_posts
@posts_for_video_in_right_menu = Post.where(video: true)
end
而且html.erb:
<%= @post.theme %>
<%= @post.content %>
<% for post in @random_post %>
<%= link_to post %>
<% end %>
<% for post in @posts_for_video_in_right_menu %>
<%= link_to post %>
<% end %>
和主網頁(在那裏我有職位名單)一個一直收到錯誤的:NoMethodError in Home#index private method 'to_param' called for #<Post:0x007fae3096bf78>
。
也許看看這個寶石:https://github.com/norman/friendly_id然而,爲了學習的目的,如何做到這一點沒有寶石是值得的,因爲它並不難實現。 –
你不應該在你的模型定義的私人部分有'to_param'。我修改了我的答案以澄清這一點。 – SteveTurczyn