在尝试一次编辑多个记录时如何更改Rails参数?

时间:2014-11-28 13:31:41

标签: ruby-on-rails ruby-on-rails-4

我需要更改表单从控制器传递的参数。例如,表单将有一个复选框。复选框传递值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

1 个答案:

答案 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