所以我设计了Active
模型的后端运行授权(您可以将Actives视为用户)。我也有ActiveAdmin与此一起运行。
这是app/admin/active.rb
:
ActiveAdmin.register Active do
# Specify which columns we want to appear in our ActiveAdmin index page
index do
column :name
column :email
column :class
column :major
# Adds view/edit/delete actions
default_actions
end
controller do
def permitted_params
params.permit!
end
end
end
问题在于:假设我用100个Actives填充我的数据库。然后我进入ActiveAdmin尝试编辑Active,并且有很多字段,包括名为Reset password token
的字段。问题是,Reset password token
(由Devise)存在唯一性约束,因为我需要在其字段中为我编辑的每个Active输入不同的内容。例如,如果我在编辑第一个Active时将其留空,则更新将完成。如果我在编辑第二个Active时将该字段留空,,我会收到此错误:
SQLite3::ConstraintException: column reset_password_token is not unique: UPDATE "actives" SET "encrypted_password" = ?, "reset_password_token" = ?, "current_sign_in_ip" = ?, "last_sign_in_ip" = ?, "major" = ?, "class" = ?, "biography" = ?, "updated_at" = ? WHERE "actives"."id" = 95
我的问题:处理此问题的最佳方法是什么?根据我所知道的(不是很多),如果用户忘记密码并且需要将密码发送给他们,则使用Reset password token
,那么如果需要更新用户,管理员应该在该字段中添加什么? ?在这种情况下最好的解决办法是什么?
感谢。
答案 0 :(得分:0)
rails generate devise:views
运行此命令,您将能够自定义设计视图。
您可以在此处详细了解如何编辑设计视图 https://github.com/plataformatec/devise#configuring-views
答案 1 :(得分:0)
将NULL写入rerset_password而不是空白。
如果为第一个用户设置为空白,则第二个空白成为约束对象。
在唯一约束的情况下,允许重复NULL并且不认为是相同的值。但请注意,并非所有引擎都确认此标准。例如MS SQL Server没有,你需要在条件中添加条件,比如其中:'([reset_password_token] IS NOT NULL)'
答案 2 :(得分:0)
很遗憾,这里没有针对实际问题的正确答案。我遇到了完全相同的问题,来到这里都无济于事。现在,在阅读了Active Admin
个文档和formatastic
个文档之后,我设法解决了这个问题。
解决方案:
问题在于,reset_password_token
自动添加到Active Admin表单中,默认情况下为null
。如果我们只是简单地进行此操作,那么我们就只提交了一个提交,但之后就没有了,因为数据库需要唯一的条目,并且只允许一个null
。唯一可行的方法是每次提交表单时始终手动提供唯一的reset_password_token
,但这不切实际。
Active Admin提供了一种控制表单字段的方法。您需要将此添加到上面的文件中:
ActiveAdmin.register Active do
# Specify which columns we want to appear in our Active Admin form (new and edit):
form title: 'Form for active ([...or any title you want...])' do |f|
inputs 'Details' do
input :name
input :email
input :class
input :major
# add any other fields you want to allow
# but not adding other fields means no other field will come into the form
# including reset_password_token. Hence, problem solved :-)
end
actions
end
# Rest of your code goes here...
end
有关可用输入选项和表单用法的更多信息,请参见格式化文档:https://github.com/formtastic/formtastic
(检查用法部分和可用输入的结尾)