Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 基于复选框值的Ruby on Rails更新记录_Ruby On Rails_Sql Update - Fatal编程技术网

Ruby on rails 基于复选框值的Ruby on Rails更新记录

Ruby on rails 基于复选框值的Ruby on Rails更新记录,ruby-on-rails,sql-update,Ruby On Rails,Sql Update,我有一个RubyonRails表单,允许用户更新一个名为“Transfers”的表。我想做的是,如果用户在表单中选择了一个特定的复选框(no_from_dept_yn),我希望它总是将其他3个字段设置为默认值,而不管用户可能选择了什么。下面被注释掉的部分是我尝试这样做的地方,但无法找出更新的正确语法。当在create方法中使用时,它确实起作用。这是我在传输控制器中的内容 def update @transfer = transfer.find(params[:id]) # if

我有一个RubyonRails表单,允许用户更新一个名为“Transfers”的表。我想做的是,如果用户在表单中选择了一个特定的复选框(no_from_dept_yn),我希望它总是将其他3个字段设置为默认值,而不管用户可能选择了什么。下面被注释掉的部分是我尝试这样做的地方,但无法找出更新的正确语法。当在create方法中使用时,它确实起作用。这是我在传输控制器中的内容

def update
    @transfer = transfer.find(params[:id])
    # if @transfer.no_from_dept_yn == true
    #  @transfer.from_person = 'Default User'
    #  @transfer.department = 'Default Dept'
    #  @transfer.location = ''
    # end
    respond_to do |format|
    if @transfer.update_attributes(params[:transfer])
    format.html { redirect_to @transfer, notice: 'Transfer was successfully updated.' }
    format.json { head :no_content }
    else
      @locations = Location.order(:name)
      @users = User.order("last_name, first_name, middle_name")
      @depts = Department.order("department_id")
      format.html { render action: "edit" }
      format.json { render json: @transfer.errors, status: :unprocessable_entity }
      end
   end
end

如果“部门”中的“否”是“转账”表中的一列,您只需将其设置为如下:

if @transfer.no_from_dept_yn?
...

如果不是,则需要单独检查参数。如果是这种情况,请告诉我,我会为您更新答案。

IIRC复选框参数值不会以布尔值的形式出现在服务器上。检查您的日志以查看参数中复选框值的格式,然后相应地修改您的条件。看起来数据库值是一个极小的值,但我忽略了提到,这种方法在create方法中确实有效…相同的if语句。我认为只要它是0,它就会认为它是假的,否则就会返回true(对于RoR,我不确定)。它在数据库表中,但这不起作用……不确定为什么。它继续将任何内容放入实际的输入框中。我如何单独检查参数,以便尝试一下?
logger.info(“@transfer.no_from_dept_yn:{@transfer.no_from_dept_yn}”)
将向您展示它的值,您应该可以从那里开始。