使用数据库中的布尔值填充options_for_select中的Selected选项

时间:2018-07-11 01:08:44

标签: ruby-on-rails drop-down-menu

嗨,我有以下下拉列表,我想根据用户是否为管理员来预选下拉值。

但是 u.admin 似乎没有完成这项工作。是否可以通过option_for_select实现此目的?

<%= form_tag users_path(u), method: :patch do %>
    <%= select_tag :admin, options_for_select([['Admin user', true], ['Normal user', nil]], u.admin) %>
    <%= submit_tag 'Update', class: "btn btn-sm btn-primary" %>
<% end %>

下面是我的用户模型

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

2 个答案:

答案 0 :(得分:1)

看起来像值想要一个字符串来匹配数组(这看起来有点奇怪,但是你能做什么?)。因此,您可以致电:

<%= 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 %>

这避免了使用其他变量使视图混乱。希望对您有所帮助:)

答案 1 :(得分:0)

经过几次尝试,我找到了一种将u.admin存储为每个用户变量的方法。这是代码

<%= form_tag users_path(u), method: :patch do %>
    <% @admin = u.admin %>
    <%= select_tag :admin, options_for_select([['Admin user', true], ['Normal user', nil]], "#{@admin}") %>
    <%= submit_tag 'Update', class: "btn btn-sm btn-primary" %>
<% end %>