Max*_*s S 0 post get ruby-on-rails
在LessonsController中,有new和create方法.
def new
@lesson = Lesson.new
end
def create
@lesson = Lesson.new(params[:lesson])
if @lesson.save do something end
end
Run Code Online (Sandbox Code Playgroud)
我一直在我的应用程序中这样做而没有想到.它有效,但我很困惑为什么我在new和create动作中创建实例变量.据我了解,这是流程:
当用户点击该new lesson按钮时,他将被定向到LessonsController#new.当他输入所需的值并点击时submit他会被引导到LessonsController#create.我不需要该create方法的视图模板.
所以我的困惑是,为什么你@lesson在create方法中再次创造对象?我认为这个问题的答案可能要涉及的一些概念GET和POSTHTTP方法为好.
我感谢任何帮助!谢谢.
这是因为HTTP是无会话协议,并且任何实例变量都不会在多个请求之间转移.
加载#new页面的请求是单个请求,一旦您提交表单和点击create按钮(或任何其他对应按钮),浏览器就会向您的#create方法发起新请求.
第一次在#new方法中 - 您正在@lesson使用它的默认值创建实例变量:
@lesson = Lesson.new
但是,第二次在#create方法中 - 新请求强制创建一个非常不同的实例变量:
@lessong = Lesson.new(params[:lesson])
这个^第二次你正在使用从表单提交的值(通常是POST请求#create)启动实例变量.我希望通过这种方式清除任何空气.