从数据库中使用布尔值填充options_for_select中的选定选项。
从数据库中使用布尔值填充options_for_select中的选定选项。
大家好,我有一个下拉表单,根据用户是否为管理员来预先选择下拉值。
然而,u.admin 似乎没有起作用。我是否可以使用 option_for_select 实现这一目标?
以下是我的用户模型代码:
create_table "users", force: :cascade do |t|
t.string "email", default: "", null: false
t.string "encrypted_password", default: "", null: false
t.string "avatar"
t.string "lastname"
t.string "firstname"
t.string "description"
t.boolean "admin"
t.index ["email"], name: "index_users_on_email", unique: true
t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true
end
问题的原因是希望使用数据库中的布尔值来填充选中的选项。解决方法是使用options_for_select方法,并将布尔值转换为字符串。以下是解决方法的示例代码:
<%= form_tag users_path(u), method: :patch do %> <%= select_tag :admin, options_for_select([['Admin user', true], ['Normal user', nil]], u.admin.to_s) %> <%= submit_tag 'Update', class: "btn btn-sm btn-primary" %> <% end %>
这样就避免了在视图中添加额外的变量。希望对你有帮助 🙂 谢谢你的建议。你的解决方案很好用。
问题的出现原因是希望根据数据库中的布尔值来选择下拉列表的选项。在给定的代码中,通过使用options_for_select
方法来创建下拉列表的选项。选项的值是一个包含两个数组的数组,每个内部数组包含选项的显示文本和相应的值。第一个内部数组表示"Admin user"选项,其值为true
,第二个内部数组表示"Normal user"选项,其值为nil
。
为了解决这个问题,可以按照以下步骤操作:
1. 在代码中,u.admin
表示用户的布尔值,需要将其作为变量存储起来。
2. 使用form_tag
方法创建一个表单,并通过users_path(u)
指定表单的提交路径和方法为patch
。
3. 在表单中,使用select_tag
方法创建一个下拉列表,并使用options_for_select
方法为下拉列表提供选项。
4. 在options_for_select
方法中,使用包含两个内部数组的数组作为参数,第一个内部数组表示"Admin user"选项,其值为true
,第二个内部数组表示"Normal user"选项,其值为nil
。
5. 在select_tag
方法中,使用:admin
作为下拉列表的名称。
6. 在submit_tag
方法中,创建一个提交按钮,并设置其显示文本为"Update",添加class: "btn btn-sm btn-primary"
属性以设置按钮的样式。
通过以上步骤,可以实现将数据库中的布尔值作为选项的值,从而实现根据数据库中的布尔值来选择下拉列表的选项。