【问题标题】:rails, friendly_id, devise username not showing slugrails,friendly_id,设计用户名不显示 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 中有相同的代码并且它运行良好。用户验证/设计是否有我遗漏的东西导致它无法工作?

任何帮助表示赞赏,谢谢!

【问题讨论】:

    标签: ruby-on-rails model devise slug friendly-id


    【解决方案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。所以我想现在一切都应该工作了!编码愉快!
    猜你喜欢
    • 1970-01-01
    • 2012-06-13
    • 1970-01-01
    • 2015-02-12
    • 2016-06-14
    • 2015-07-30
    • 2017-05-05
    • 2015-12-27
    • 1970-01-01
    相关资源
    最近更新 更多