我需要更改表单从控制器传递的参数。例如,表单将有一个复选框。复选框传递值0或1.我需要在提交之前将它们转换为true和false。我需要改变一些价值观。
但是我试图在本教程中更新同一页面中的多条记录:http://railscasts.com/episodes/165-edit-multiple-revised。在这种情况下,如何改变参数?
我的控制器:
def update_submits
@submits = Submit.update(params[:submits].keys, params[:submits].values)
if @submits.empty?
redirect_to root_url
else
@rejected = current_user.rejected
render 'uploaded'
end
end
答案 0 :(得分:2)
为什么需要将0
转换为false
?看看例子,你理解我的意思:
=> Record.last
#> Record Load (0.8ms) SELECT "records".* FROM "records" ORDER BY "records"."id" DESC LIMIT 1
=> #<Record id: 1, private: false ....>
=> Record.last.update(private: 1)
#> Record Load (0.7ms) SELECT "records".* FROM "records" ORDER BY "records"."id" DESC LIMIT 1
#> (1.3ms) BEGIN
#> ........
#> SQL (4.4ms) UPDATE "records" SET "private" = $1 WHERE "records"."id" = '1' [["private", "t"]]
#> true
=> Record.last
=> #<Record id: 1, private: true ....>
Rails为此db列的工作设置了values
:
TRUE_VALUES = [true, 1, '1', 't', 'T', 'true', 'TRUE', 'on', 'ON'].to_set
FALSE_VALUES = [false, 0, '0', 'f', 'F', 'false', 'FALSE', 'off', 'OFF'].to_set
这意味着您可以将false
传递给update()
此列表中的任何值false, 0, '0', 'f', 'F', 'false', 'FALSE', 'off', 'OFF'
毕竟(不确定现在是否需要)。如何在传递更新之前更改params
(简单方式为tap()
):
def record_params
params.permit(:name, :last_name).tap do |record_params|
record_params[:some_attribut] = true
end
end
此返回已更新params
。