[英]Replace '%20' with '-' in url for Ruby on Rails
我在生成的URL中將“%20”替換為“-”時遇到一些問題。 基本上,我有一個圖書搜索表單,該表單將用戶輸入與數據庫進行匹配,然后在顯示頁面中填充匹配的圖書。 然后,用戶可以在顯示頁面上單擊“查看更多”按鈕,並將其定向到該特定項目的頁面(通過數據庫填充屬性)。
在顯示頁面上,當用戶單擊“查看更多”時,我有以下幾行將項目名稱傳遞給url:
<td><br><a href="/books/<%=book.bookname%>">View More</a>
路由文件將具有以下行:
match '/books/:display_book', to: 'books#show', via:'get'
然后,參數:display_book將被傳遞到控制器文件中:
@displaybook=Book.find_by(bookname: params[:display_book])
然后/ books / <%= book.bookname%>頁面將顯示特定的書籍屬性。
當<%= book.bookname%>傳遞到url中時,上面的行中存在問題。 一些書在數據庫中有空格和大寫字母。 最好用破折號代替空格,並在url中將所有大寫字母改為小寫字母。 但是,這樣做將導致參數在控制器文件中不匹配。 最好的方法是什么?
也許您想看看Friendly ID- https://github.com/norman/friendly_id
如果您應用gem,則將在books表中創建一個名為“ slug”的新屬性。
該段將自動生成連字符(-)。 因此,在您的情況下,如果您有一本書的標題為“拯救了瑞典國王的女孩”,那么在創作時會產生以下create:“瑞典國王的女孩”。 我想目前您的網址中也存在大寫字母的問題-這樣做無害,但並不干凈。 這樣那個問題也會消失:)
PS:如果標題重復,它也有助於創建獨特的子彈。 例如,如果您的網站上有相同標題的書,但出版商不同或出版日期不同,則可以定義子條目候選者-這意味着,如果另一個條目具有相同的子條目,則您想添加另一個屬性。
這是一個例子:
#models/book.rb
extend FriendlyId
friendly_id :slug_candidates, use: :slugged
private
def slug_candidates
[ :title
[:title, :publisher],
[:title, :publisher, :publish_date]
]
end
這是Rails 4的詳細說明: http : //norman.github.io/friendly_id/4.0/
由於您不知道哪個字母可能是大寫字母,因此假設您可以在實名和URL安全名稱之間來回轉換是不安全的。 我將給出解決方案的概述; 請原諒我沒有時間為您編寫代碼。
Book
模型中,在create
方法上創建一個after_filter
,
該解決方案使您避免使用ID值,因為ID值不會創建令人難忘的URL。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.