现在,这就是我在Rails应用程序中创建单选按钮的方式:
<div class="form-group row">
<%= form.label :exclusion, class: "col-sm-3 col-form-label", for: 'scope_exclusion' %>
<div class="col-sm-9 col-lg-9 col-12 pt-2 pl-3">
<div class="radio radio-success form-check-inline">
<%= form.radio_button :exclusion, true %>
<label for="scope_exclusion_true"> Yes </label>
</div>
<div class="radio radio-danger form-check-inline">
<%= form.radio_button :exclusion, false %>
<label for="scope_exclusion_false"> No </label>
</div>
</div>
</div>
问题是,当它到达控制器时,参数如下所示:
{"exclusion"=>"false"}
但是,这似乎没有进入数据库,尽管没有任何错误。例如
2.5.8 :014 > Scope.last.update(exclusion: "true")
Scope Load (1.1ms) SELECT "scopes".* FROM "scopes" ORDER BY "scopes"."id" DESC LIMIT $1 [["LIMIT", 1]]
(0.5ms) BEGIN
Scope Update (0.8ms) UPDATE "scopes" SET "exclusion" = $1, "updated_at" = $2 WHERE "scopes"."id" = $3 [["exclusion", 0], ["updated_at", "2020-06-03 17:44:18.296337"], ["id", 1057]]
(0.4ms) COMMIT
=> true
2.5.8 :015 > Scope.last.exclusion
Scope Load (1.1ms) SELECT "scopes".* FROM "scopes" ORDER BY "scopes"."id" DESC LIMIT $1 [["LIMIT", 1]]
=> 0
2.5.8 :016 >
这不起作用,但是如果我传递值true
而不是"true"
,那么它就可以工作,如下所示:
2.5.8 :016 > Scope.last.update(exclusion: true)
Scope Load (1.2ms) SELECT "scopes".* FROM "scopes" ORDER BY "scopes"."id" DESC LIMIT $1 [["LIMIT", 1]]
(0.9ms) BEGIN
Scope Update (0.7ms) UPDATE "scopes" SET "exclusion" = $1, "updated_at" = $2 WHERE "scopes"."id" = $3 [["exclusion", 1], ["updated_at", "2020-06-03 17:44:43.940131"], ["id", 1057]]
(0.5ms) COMMIT
=> true
2.5.8 :017 > Scope.last.exclusion
Scope Load (1.2ms) SELECT "scopes".* FROM "scopes" ORDER BY "scopes"."id" DESC LIMIT $1 [["LIMIT", 1]]
=> 1
如何调整我的 HTML 表单,使其实际传递布尔true
或false
,而不是"true"
或"false"
?
通过将值从true
更改为1
,false
将值更改为0
,这似乎解决了我的问题。我意识到数据库字段不是设置为布尔值,而是设置为实际整数,因此解释了原因:
<div class="form-group row">
<%= form.label :exclusion, class: "col-sm-3 col-form-label", for: 'scope_exclusion' %>
<div class="col-sm-9 col-lg-9 col-12 pt-2 pl-3">
<div class="radio radio-success form-check-inline">
<%= form.radio_button :exclusion, "1" %>
<label for="scope_exclusion_true"> Yes </label>
</div>
<div class="radio radio-danger form-check-inline">
<%= form.radio_button :exclusion, "2" %>
<label for="scope_exclusion_false"> No </label>
</div>
</div>
</div>