首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Rails / Friendly-Id创建区分大小写的URL?

如何使用Rails / Friendly-Id创建区分大小写的URL?
EN

Stack Overflow用户
提问于 2016-01-10 23:26:43
回答 2查看 661关注 0票数 1

我正在使用Friendly-Id gem创建漂亮的网址。我想创建区分大小写的网址,并将同一网址的所有其他大小写版本重定向到具有301状态的默认网址。

代码语言:javascript
复制
/profile/Jack-Wild # default URL
/profile/jack-wild # redirect to /profile/Jack-Wild
/profile/jaCk-Wild # redirect to /profile/Jack-Wild

Friendly_Id downcase的段塞,只匹配和接受小写的URL,404所有其他的东西。

可行的解决方案是维护一个slug_case_sensitive ( Jack-Wild )以及slug的默认小写版本( jack-wild )。

然后使用params[:id].downcase通过slug列进行Friendly_Id搜索,如果是params[:id] != slug_case_sensitive,则重定向到首选的URL ( /profile/slug_case_sensitive )。

这是我关于如何实现它的想法,但缺少一些谜题,希望有人能帮助填补它们。

修改create和update slug方法,以创建和更新两个版本的slug。这将只有一个方法:set_slug

代码语言:javascript
复制
# 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

假设slug没有被降级。用:send "#{friendly_id_config.slug_column}=", slug.downcase send "#{friendly_id_config.slug_column_case_sensitive}=", slug更改:send "#{friendly_id_config.slug_column}=", slug就足够了吗?另外,如何添加和设置friendly_id_config.slug_column_case_sensitive选项?

然后,更改user_path(@user)<%= link_to "My profile", current_user %>以返回区分大小写的URL。但没有比user_path(id:@user.slug_case_sensitive)更好的方法了,它很难看,而且我不得不到处修改它,不确定它是否可以在第三方宝石中完成……

任何关于这方面的想法都将是有帮助的,并非常感谢。谢谢!

EN

回答 2

Stack Overflow用户

发布于 2016-01-10 23:54:17

也许在这种情况下可以应用不同的方法:最有可能的是在Nginx后面使用您的Rails应用程序作为代理。然后,可以重写所有配置文件的请求,其中包含大写字母的规范变体。这将比发出额外的DB请求和使用整个Rails堆栈更快。此外,它可以更简单地实现。

票数 1
EN

Stack Overflow用户

发布于 2017-04-05 23:28:37

您可以覆盖模型中的normalize_friendly_id方法:

代码语言:javascript
复制
def normalize_friendly_id(value)
  value.to_s.parameterize(preserve_case: true)
end

它依赖于接受preserve_case选项的ActiveSupport parameterize

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34707159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档