使用 hstore 并为用户保存新值
Using hstore and saving new values for user
我的用户模型包含以下值:
姓名、电子邮件、phone、已批准等。
我正在处理的项目范围包括自定义用户设置,因此我正在使用 hstore(我不想创建 user_settings table)。
在用户编辑视图中,我想创建一个名为 'colors' 的复选框,是否选中该复选框决定是否为用户设置了该设置。
我已经设置了 hstore 如下:
class AddHstore < ActiveRecord::Migration
def up
enable_extension :hstore
end
def down
disable_extension :hstore
end
end
并更新用户模型如下:
class AddSettingsToUser < ActiveRecord::Migration
def up
add_column :users, :settings, :hstore
end
def down
remove_column :users, :settings
end
end
这基本上是我的用户编辑视图:
<%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put, :class => "form-horizontal user" }) do |f| %>
<%= devise_error_messages! %>
<div class="field">
<%= f.label :name %><br />
<%= f.text_field :name, autofocus: true %>
</div>
<div class="field">
<%= f.label :email %><br />
<%= f.email_field :email %>
</div>
<div class="field">
<%= f.label :phone_number %><br />
<%= f.text_field :phone_number %>
</div>
<div class="actions">
<%= f.submit 'Update', :class => 'btn btn-primary' %>
</div>
<% end %>
此时我不确定如何实际实现此功能。用户编辑页面允许用户更改他们的姓名、phone 和其他值,但我如何为 hstore settings
?
添加新值
在您创建用户的 form_for
中,添加您的 hstore 文件,如下所示:
<%= form_for resource, ...do |f| %>
#...
<%= f.fields_for :settings do |settings| %>
<%= settings.text_field :field1 %>
<%= settings.text_field :field2 %>
<% end %>
#....
<% end %>
然后像下面这样更新您的控制器强参数方法以允许这些新字段。:
def user_params
params.require(:user)
.permit(
:name,
:email,
settings: [ :field1, :field2 ]
)
end
现在,你已经完成了。打开您的 rails 控制台并尝试一些示例数据,例如
User.create(
settings: { field1: 'data1', field2: 'data2' }
)
我的用户模型包含以下值:
姓名、电子邮件、phone、已批准等。
我正在处理的项目范围包括自定义用户设置,因此我正在使用 hstore(我不想创建 user_settings table)。
在用户编辑视图中,我想创建一个名为 'colors' 的复选框,是否选中该复选框决定是否为用户设置了该设置。
我已经设置了 hstore 如下:
class AddHstore < ActiveRecord::Migration
def up
enable_extension :hstore
end
def down
disable_extension :hstore
end
end
并更新用户模型如下:
class AddSettingsToUser < ActiveRecord::Migration
def up
add_column :users, :settings, :hstore
end
def down
remove_column :users, :settings
end
end
这基本上是我的用户编辑视图:
<%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put, :class => "form-horizontal user" }) do |f| %>
<%= devise_error_messages! %>
<div class="field">
<%= f.label :name %><br />
<%= f.text_field :name, autofocus: true %>
</div>
<div class="field">
<%= f.label :email %><br />
<%= f.email_field :email %>
</div>
<div class="field">
<%= f.label :phone_number %><br />
<%= f.text_field :phone_number %>
</div>
<div class="actions">
<%= f.submit 'Update', :class => 'btn btn-primary' %>
</div>
<% end %>
此时我不确定如何实际实现此功能。用户编辑页面允许用户更改他们的姓名、phone 和其他值,但我如何为 hstore settings
?
在您创建用户的 form_for
中,添加您的 hstore 文件,如下所示:
<%= form_for resource, ...do |f| %>
#...
<%= f.fields_for :settings do |settings| %>
<%= settings.text_field :field1 %>
<%= settings.text_field :field2 %>
<% end %>
#....
<% end %>
然后像下面这样更新您的控制器强参数方法以允许这些新字段。:
def user_params
params.require(:user)
.permit(
:name,
:email,
settings: [ :field1, :field2 ]
)
end
现在,你已经完成了。打开您的 rails 控制台并尝试一些示例数据,例如
User.create(
settings: { field1: 'data1', field2: 'data2' }
)