ruby-on-rails – ruby?? on rails基础知识帮助
我用rails的名字在rails中创建了一个脚手架应用程序. product_controller.rb文件包含以下内容.
class ProductsController < ApplicationController def new @product = Product.new respond_to do |format| format.html # new.html.erb format.xml { render :xml => @product } end end def create @product = Product.new(params[:product]) respond_to do |format| if @product.save flash[:notice] = 'Product was successfully created.' format.html { redirect_to(@product) } format.xml { render :xml => @product,:status => :created,:location => @product } else format.html { render :action => "new" } format.xml { render :xml => @product.errors,:status => :unprocessable_entity } end end end 现在给出了url http:// localhost:3000 / products / create >如果单击新产品链接,控制将转移到控制器类中的新定义,然后创建实例变量@product.但是这个变量通过了什么?该函数依次调用包含的new.rhtml <% form_for(@product) do |f| %> #all form elements declaration <% f.submit "Create" %> <%= end %> >此处@product在控制器文件中初始化并传递给此new.rhtml.那么form_for(@product)在哪里获取数据? 我对ROR的基础知识非常困惑.有人请帮我澄清一下.请原谅我发这么大的帖子.我对这段代码有很多疑问 解决方法
哇,那是很多问题.首先,我建议你拿一份“
Beginning Rails 3”,这是对Rails的精彩介绍,它将回答所有这些问题,并帮助你快速成为一个非常扎实的rails程序员.
其次,这里有一些基本的答案: 1)您不应浏览产品/创建,只需浏览到产品/新产品.每当您浏览到您正在发送GET请求的URL时. “new”操作需要GET请求,但CREATE操作需要POST请求.通过提交表单生成POST请求. 因此,流程是这样的: NEW操作用于创建适合所讨论模型(产品)的表单.当您从products / new提交表单时,它将POST到products / create,这将触发CREATE操作中的代码. NEW和CREATE之间的关系在EDIT和UPDATE中反映出来.即,将您浏览的对象更改为products / 123 / edit,然后从那里提交一个触发UPDATE操作的表单. 这一切都属于所谓的“RESTful”设计,这实际上是Rails工作的核心.您可能想要了解有关REST,here’s a good place to start的更多信息. 2)form_for从控制器获取数据 – 但是在新操作的情况下,它不获取数据,只是一个空(新)对象. form_for是一个帮助器,它接收一个对象,并从该对象确定需要发生的一些HTML,以便生成的表单与控制器正确交互. 在产品/编辑中加载页面时会发生同样的情况,但不同之处在于,如果您传递form_for现有(非新)对象,它将使用对象中的现有值填充表单的字段. 3)通过HTML< form>中设置的HTTP请求进行控制转移.标签.这是rails的“魔力”的一部分,它为您处理浏览器和控制器之间的联系,因此您不必担心它. 4)我通常不使用redirect_to(@product),但我希望它能带你到你刚创建的产品的页面,即:products / 123,其中123是产品的ID. 我希望这会有所帮助,但是请考虑选择Beginning Rails书:它非常好,你可以在大约一周内完成它,你可以通过开始坚实的基础而不是徘徊来节省大量的时间这样的代码对你来说完全不熟悉. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |