我在网络应用程序的设计中遵循了ruby on rails教程,现在我正在冒险尝试添加一些本教程未涉及的功能。
目前,我正在尝试允许用户在注册时选择自己的角色。我认为下拉选择会起作用,但我希望将'scout'或'leader'切换为true(用户模型中的布尔字段)。我不确定如何使用<%= f.select %>
来做到这一点。可能类似
<%= select(:scout, [['Scout', true], ['Leader', true]]) %>
但这不起作用,因为它只分配到scout布尔值。我希望我的问题足够清楚。有什么想法吗?
答案 0 :(得分:4)
有几种方法可以实现您的意图,但使用您当前的设计,您可以这样做:
在您的模型中,添加回调before_save :process_user_role
class User
...
before_save :process_user_role
...
def process_user_role
self.leader = true unless self.scout
end
end
当leader
字段设置为false时,上面的代码可以帮助您将true
字段设置为scout
。否则什么也不做:)
虽然上述解决方案应该可以正常工作,但还有一个更优雅的解决方案是使用ActiveRecord::Enum
来管理用户角色。
您可以在此处学习:http://edgeapi.rubyonrails.org/classes/ActiveRecord/Enum.html
答案 1 :(得分:0)
你能做的是
<%= select(:role, [['Scout', 'scout'], ['Leader', 'leader']]) %>
这会将数据存储在:role
中,稍后您可以比较role
的类型