带简单形式导轨的单选按钮

时间:2013-09-17 23:37:47

标签: ruby-on-rails simple-form

我有一个用户模型,如下所示:

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,也可以不是,但不能同时使用。{/ p>

2 个答案:

答案 0 :(得分:1)

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

f.collection_radio_buttons :status, ['admin','active']

答案 1 :(得分:0)

我同意@juanpastas&amp; @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"