我想在Rails上的设计宝石中添加用户的自定义字段,如名称,性别和描述。
我把代码放到我的application_controller:
before_action :configure_devise_permitted_parameters, if: :devise_controller?
protected
def configure_devise_permitted_parameters
registration_params = [:name, :sex, :description, :email, :password, :password_confirmation]
if params[:action] == 'update'
devise_parameter_sanitizer.for(:account_update) {
|u| u.permit(registration_params << :current_password)
}
elsif params[:action] == 'create'
devise_parameter_sanitizer.for(:sign_up) {
|u| u.permit(registration_params)
}
end
end
并生成迁移以将这些字段添加到users表中:
class AddNameSexDescriptionToUsers < ActiveRecord::Migration
def change
add_column :users, :name, :string
add_column :users, :sex, :integer
add_column :users, :description, :text
end
end
这里我将性别列设置为整数,但我想在视图页面上显示字符串,如男性,女性,未知。
我想在下拉列表框中显示该列表。
我在这里更改了设计registrations/edit.html.erb
来源:
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => { :method => :put }) do |f| %>
<!-- etc. -->
<div class="form-group">
<%= f.label :sex %><br />
<%= f.select :sex, ?, class: "form-control" %>
</div>
<!-- etc. -->
<% end %>
如果我创建了一个性别模型,我可以像这样设置f.select
:
<%= f.select :sex, Sex.all.map{|t| [t.name, t.id]}, class: "form-control" %>
但我认为没有必要让一张表只保存三条记录。那么如何以良好的方式做到性爱呢?
答案 0 :(得分:1)
我认为你想要的是enum,这允许你定义一个哈希,并且它将哈希键存储在数据库中,这是一个整数,但是该值被提取为字符串
在模型中它看起来像这样
Model < ActiveRecord::Base
enum sex: [ :male, :female, :unknown ]
end
你可以添加辅助方法
def self.sexes_for_select
sexes.keys.map{ |x| [x.humanize, x] }
end
在视图中
<%= f.select :sex, Model.sexes_for_select, class: "form-control" %>