几个我不明白的 Rails 问题



我刚开始学习rails,有一些东西我不明白:

1-这两个赋值有什么区别?为什么我可以在同一个帮助器中使用它?

  def current_employee=(employee)
    @current_employee = employee
  end
  def current_employee
    remember_token = Employee.hash(cookies[:remember_token])
    @current_employee ||= Employee.find_by(remember_token: remember_token)
  end

2-这两个更新函数有什么区别,为什么这里需要json ?

  def update
    respond_to do |format|
      if @employee.update(employee_params)
        format.html { redirect_to @employee, success: 'Employee was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: 'edit' }
        format.json { render json: @employee.errors, failure: :unprocessable_entity }
      end
    end
  end

def update
    @employee = Employee.find(params[:id])
    if @employee.update_attributes(employee_params)
      # Handle a successful update.
    else
      render 'edit'
    end
end

1-这两个赋值有什么区别?为什么我可以在同一个帮助器中使用它?

  def current_employee=(employee)
    @current_employee = employee
  end
  def current_employee
    remember_token = Employee.hash(cookies[:remember_token])
    @current_employee ||= Employee.find_by(remember_token: remember_token)
  end

第一个current_employee=(employee)被称为setter,因为您在@current_employee上设置了一个新值。第二个,current_employee,被称为getter,因为你得到的是@current_employee的当前值。关于setter和getter的更多信息。

在getter方法中,||=用于memoization。因此,第一次调用current_employee时,Employee.find_by(remember_token: remember_token)的值被赋给@current_employee。在对getter方法的后续调用中,将检索相同的值。

2-这两个更新函数有什么区别,为什么这里需要json ?

  def update
    respond_to do |format|
      if @employee.update(employee_params)
        format.html { redirect_to @employee, success: 'Employee was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: 'edit' }
        format.json { render json: @employee.errors, failure: :unprocessable_entity }
      end
    end
  end

def update
    @employee = Employee.find(params[:id])
    if @employee.update_attributes(employee_params)
      # Handle a successful update.
    else
      render 'edit'
    end
end

两个update方法本质上是相同的。最后一个是只响应HTML格式。第一个示例同时响应HTML和JSON格式。如果您不需要响应JSON格式,则可以使用最后一个。

最新更新