rails,friendly_id,设计用户名不显示 slug
Posted
技术标签:
【中文标题】rails,friendly_id,设计用户名不显示 slug【英文标题】:rails, friendly_id, devise username not showing slug 【发布时间】:2015-01-17 21:25:18 【问题描述】:我觉得我遗漏了一些明显的东西,但希望有人能尽快帮助我。
我正在尝试为我的用户模型创建一个friendly_id slug(使用设计)。这是我的模型:
class User < ActiveRecord::Base
extend FriendlyId
friendly_id :username, use: [:slugged, :finders]
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
validates :username, :uniqueness => :case_sensitive => false,
:format => with: /\A[a-zA-Z0-9]+\Z/
end
在我的用户控制器中:
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
end
end
当我在浏览器中加载 show 方法时,它仍然有 localhost:3000/user/3 - 它没有显示 slug。我知道我一切正常,因为我的 Post Model 中有相同的代码并且它运行良好。用户验证/设计是否有我遗漏的东西导致它无法工作?
任何帮助表示赞赏,谢谢!
【问题讨论】:
【参考方案1】:原因是 slug 没有保存。我认为您正在尝试查找在初始化友好 ID 之前保存的旧记录。但是,尽管您可以生成 slug 并为您的记录生成友好 ID。这是过程。
def should_generate_new_friendly_id?
new_record? || slug.nil? || slug.blank? # you can add more condition here
end
添加此方法后,再次尝试保存所有记录。如果条件与您在该块中定义的条件匹配,Friendly 将调用该方法并更新 slug。
User.find_each(&:save!)
在您的视图文件中写入如下网址:
<%= link_to "USER", current_user %>
或
<%= link_to "USER", user_path(current_user.to_param) %>
还请确保您没有将用户名留空。如果用户名有可能为空,您可以使用动态方法,您可以有条件地设置列以用于生成 slug。我想这应该就是全部了! 谢谢!
【讨论】:
嗨 Rubyrider - 感谢您的回复!我尝试了你的建议,但它仍然没有在 URL 中显示 slug。事实上,我在 User 表中取了很多,并且填充了 slug 列,所以它肯定是节省的。事实上,如果我在 URL 中输入 slug,它就可以工作。 (例如 localhost:3000/user/bobsmith) - 只有当我从页面单击链接时,它仍会显示 ID。有什么建议吗? 哦,我明白了。那么你如何定义你的网址呢?能给我举个例子吗?所以我可以帮忙吗?我想我理解你的问题。 好的,谢谢! - 在我的显示方法视图中,我的主要用户链接之一是: - 此链接将转到 localhost:3000/user/3 朋友说错了 :) 让我在我的回答中说明好吗? 现在只需检查我的答案 :) 您直接调用 id 属性,它只会给您 id 值。但是rails通过在对象上调用to_param来生成url来生成id。所以我想现在一切都应该工作了!编码愉快!以上是关于rails,friendly_id,设计用户名不显示 slug的主要内容,如果未能解决你的问题,请参考以下文章
导轨/Friendly_id。如何为旧的(丑陋的)URL 呈现 404 页面
Rails:Friendly_id 不会为旧记录生成 slug