我刚开始学习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格式,则可以使用最后一个。