我觉得我错过了一些明显的东西,但希望有人可以帮我快点。
我正在尝试为我的用户模型创建一个friendly_id slug(使用Devise)。这是我的模特:
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
在我的UserController中:
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
end
end
当我在浏览器中加载show方法时,它仍然具有localhost:3000 / user / 3 - 它不会显示slug。我知道我已经完成了所有工作,因为我在Post模型中使用了相同的代码并且它完美运行。用户验证/设计中是否存在一些导致其无法正常工作的内容?
感谢任何帮助,谢谢!
答案 0 :(得分:4)
原因是slug没有保存。我想您正在尝试查找在初始化friendly_id之前保存的旧记录。但是,虽然您可以生成slug并为您的记录生成friendly-id。这是过程。
def should_generate_new_friendly_id?
new_record? || slug.nil? || slug.blank? # you can add more condition here
end
添加此方法后,只需尝试再次保存所有记录。友好将调用该方法,如果条件匹配您在该块内定义的条件,将更新slug。
User.find_each(&:save!)
在您的视图文件中写下网址:
<%= link_to "USER", current_user %>
或
<%= link_to "USER", user_path(current_user.to_param) %>
另请确保您没有空白的用户名。如果用户名可能为空,则可以使用动态方法,您可以有条件地设置列以用于生成slug。我想应该就是全部! 谢谢!