gpt4 book ai didi

ruby-on-rails - 从表单中选择枚举以设置角色

转载 作者:行者123 更新时间:2023-12-03 21:01:39 25 4
gpt4 key购买 nike

Ruby on Rails 4.1

我正在使用具有枚举角色的Devise。当前,在创建用户时会设置默认角色。我想向创建用户以设置枚举角色的窗体添加一个字段。

我读了this,但没有说如何利用新角色。

这是用户类

devise :database_authenticatable, :registerable, :confirmable,
:recoverable, :rememberable, :trackable, :validatable
enum role: [:user, :vip, :admin, :developer, :marketing, :support, :translator]
after_initialize :set_default_role, :if => :new_record?

def set_default_role
self.role ||= :user
end


这是表单中要尝试选择枚举角色的部分:

<div class="form-group">
<%= f.collection_select :role, User.roles, :id, :enum, {prompt: "Select a role"}, {class: "form-control input-lg"} %>
</div>


错误:

NoMethodError - undefined method `enum' for ["user", 0]:Array:
actionview (4.1.1) lib/action_view/helpers/form_options_helper.rb:761:in `value_for_collection'


我以前从未使用过枚举,并且 the documentation证明没有帮助。如何显示枚举选项?

最佳答案

首先,enum不是属性的名称。该属性的名称是role

看一下rails-devise-pundit示例应用程序,特别是文件app / views / users / _user.html.erb,该文件是创建表单以允许管理员更改用户角色的部分文件。我怀疑您想使用collection_select作为辅助对象(如果您有单独的角色模型,这是否合适)。而是,一个普通的select表单助手将起作用。

这是一个简单的示例,对角色选项进行了硬编码:

<%= f.select(:role, [['User', 'user'], ['Vip', 'vip'], ['Admin', 'admin']]) %>


这是一个更好的示例,它避免了对表单中的角色进行硬编码:

<%= f.select(:role, User.roles.keys.map {|role| [role.titleize,role]}) %>


该语句从User模型中获取角色数组,并使用 map方法构造键-值对数组。

关于ruby-on-rails - 从表单中选择枚举以设置角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24193814/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com