Rails 5在db中按名称发出friendly_id搜索不允许删除或更新?

时间:2018-01-21 00:19:27

标签: ruby-on-rails ruby rubygems friendly-id

这是我的模特用户

class User < ApplicationRecord
  extend FriendlyId
    friendly_id :name
end

用户名不是uniq。

我想要这样的网址:

http://localhost:3000/users/myname

这是我的控制者:

class UsersController < ApplicationController
before_action :set_user

def set_user
  @user = User.friendly.find(params[:id])
end
end

URL显示正常,只是我想要的方式,但问题是当我尝试删除用户时,控制台服务器显示&#34;回滚&#34;我注意到这是因为有两个或更多用户具有相同的名称,因此它可以删除用户。 所以我现在的问题是我已经实现了gem friendly_id,它是按名称搜索和set_user,但是我想通过ID设置set_admin,所以我可以通过id删除(这样,如果有许多同名的用户,这并不重要)。我的其他模型也重复了这个问题。

如何避免这种行为,我需要通过id设置模型,但要显示名称或加密url中的id。你推荐我其他宝石或我应该如何正确实施。 (不是将名称设置为uniq的选项)。感谢

1 个答案:

答案 0 :(得分:0)

根据我的理解, 友好ID使用db级别的唯一性验证

https://github.com/norman/friendly_id/blob/aff0564584e84ffa505e6e278b65ca3c4ee5d698/lib/friendly_id/migration.rb#L12

如果您已拥有同名用户,则应删除这些条目。 (这与我们尝试将唯一索引放入db中已存在相同条目值的列的条件非常相似)

然后安装friendly_id gem,并进行输入。我确信gem创建的slu不会重复,所以每条记录都是唯一的,你可以使用id Too删除记录