0

我有一个看起来像这样的用户模型:

class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.string :name
      t.string :email
      t.string :password_digest
      t.boolean :admin, default: false
      t.boolean :active, default: false
      t.string :auth_token
      t.string :password_reset_token
      t.datetime :password_reset_sent_at
      t.timestamps
    end
  end
end

管理员可以创建用户。我将如何制作单选按钮组:admin:active不是我的创建用户表单中的复选框?我希望新用户成为:admin,:active或两者都不是,但不能两者兼而有之。

4

2 回答 2

1

在评论中提到该字段后status,请尝试:

f.collection_radio_buttons :status, ['admin','active']
于 2013-09-18T00:39:52.207 回答
0

我同意@juanpastas 和@depa 的观点——更简洁、更简单的方法是使用单个状态字段。如果由于某种原因你绝对必须继续你正在走的路,那么就有可能以一种形式实现这一目标。很多活动部件。

在您的模型中:

attr_accessor :user_type

在您的控制器创建方法中添加一个 case 语句来确定要根据 user_type 的值更改哪些布尔值

case params[:user][:user_type]
when "admin"
  user.admin = true
when "active"
  user.active = true
end 

在您的视图中创建一个集合

- radio_buttons = [ { :text => 'Active User', :value => :active } , { :text => 'Admin User', :value => :admin } ]
= simple_form_for(@user) do |f|
  = f.label  "User Type"
  = f.collection_radio_buttons :user_type, (radio_buttons.collect do |r| [r[:text], r[:value] ] end), :second, :first do |builder|
    = builder.label{builder.radio_button(:class => 'user_options') + builder.text}
  = # Whatever other form fields you want to add
  = f.button :submit, "Sign up"
于 2013-09-18T01:05:45.893 回答