我只是通过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
答案 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格式,则可以使用最后一个格式。