簡體   English   中英

如何使用Rails / Friendly-Id區分大小寫的URL?

[英]How to make case sensitive URLs with Rails / Friendly-Id?

我正在使用Friendly-Id gem來創建漂亮的URL。 我想創建區分大小寫的URL,並將同一URL的所有其他大小寫版本重定向到狀態為301的默認URL。

/profile/Jack-Wild # default URL
/profile/jack-wild # redirect to /profile/Jack-Wild
/profile/jaCk-Wild # redirect to /profile/Jack-Wild

Friendly_Id小寫字母,並且僅匹配並接受小寫字母網址,其他為404

slug_case_sensitive解決方案是維護slug_case_sensitive (Jack-Wild)以及slug的默認小寫版本(jack-wild)。

然后使Friendly_Id由搜索slug柱,用params[:id].downcase並且如果params[:id] != slug_case_sensitive重定向到優選URL( /profile/slug_case_sensitive )。

這是我關於如何實現的想法,缺少一些難題,希望有人可以幫助他們解決。

修改create和update slug方法,以創建和更新兩個版本的slug。 這只會是一種方法: set_slug

# Sets the slug.
def set_slug(normalized_slug = nil)
  if should_generate_new_friendly_id?
    candidates = FriendlyId::Candidates.new(self, normalized_slug || send(friendly_id_config.base))
    slug = slug_generator.generate(candidates) || resolve_friendly_id_conflict(candidates)
    send "#{friendly_id_config.slug_column}=", slug
  end
end
private :set_slug

假設子彈未壓縮。 應該更改: send "#{friendly_id_config.slug_column}=", slug使用: send "#{friendly_id_config.slug_column}=", slug.downcase send "#{friendly_id_config.slug_column_case_sensitive}=", slug是否足夠? 另外,如何添加和設置friendly_id_config.slug_column_case_sensitive選項?

然后,將user_path(@user)<%= link_to "My profile", current_user %> user_path(@user)更改<%= link_to "My profile", current_user %>以返回區分大小寫的URL。 但是沒有比user_path(id:@user.slug_case_sensitive)更好的方法了,這很難看,而且我將不得不在各處進行更改,並且不確定是否可以在第三方寶石中完成...

關於此的任何想法將有所幫助,將不勝感激。 謝謝!

也許在這種情況下可以采用不同的方法:最有可能的是,您將在Nginx后面使用Rails應用程序作為代理。 然后,可以將所有帶有大寫字母的配置文件請求重寫為規范變體。 它比發出其他數據庫請求和使用整個Rails堆棧要快。 而且它可能更容易實現。

您可以在模型中覆蓋方法normalize_friendly_id

def normalize_friendly_id(value)
  value.to_s.parameterize(preserve_case: true)
end

它依靠的ActiveSupport參數化它接受一個preserve_case選項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM