我有一个用户模型,如下所示:
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>
答案 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"