Rails夫妇问我不明白

时间:2014-03-27 14:44:52

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

我只是通过this教程学习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 个答案:

答案 0 :(得分:4)

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的当前值。 More info about setters and getters

在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格式,则可以使用最后一个格式。