在rails

时间:2015-11-19 19:20:18

标签: ruby-on-rails ruby forms select

我在网络应用程序的设计中遵循了ruby on rails教程,现在我正在冒险尝试添加一些本教程未涉及的功能。

目前,我正在尝试允许用户在注册时选择自己的角色。我认为下拉选择会起作用,但我希望将'scout'或'leader'切换为true(用户模型中的布尔字段)。我不确定如何使用<%= f.select %>来做到这一点。可能类似

<%= select(:scout, [['Scout', true], ['Leader', true]]) %>

但这不起作用,因为它只分配到scout布尔值。我希望我的问题足够清楚。有什么想法吗?

2 个答案:

答案 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的类型