gpt4 book ai didi

ruby-on-rails - ruby on rails 基础帮助

转载 作者:行者123 更新时间:2023-12-04 23:09:20 24 4
gpt4 key购买 nike

我在 rails 中创建了一个名为 product 的脚手架应用程序. 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给出
  • 单击新产品链接时,控制将转移到 Controller 类中的新定义,然后创建实例变量@product。但是这个变量在哪里传递?该函数依次调用 new.rhtml ,其中包含
    <% form_for(@product) do |f| %>
    #all form elements declaration
    <% f.submit "Create" %>
    <%= end %>
  • 这里@product 在 Controller 文件中初始化并传递给这个new.rhtml。那么form_for(@product)从哪里获取数据呢?
  • 单击提交按钮时,控件如何转移到 Controller 文件中的创建函数?没有为 Controller 文件指定操作的地方。
  • 在创建函数中,redirect_to(@product) 指定@product 是从 new.html 文件接收的对象的位置是什么...

  • 我对 ROR 的基础知识非常困惑。有人请帮我澄清这一点。原谅我发了这么大的帖子。我对这段代码有很多疑问

    最佳答案

    哇,这是很多问题。首先,让我推荐您阅读“Beginning Rails 3”,这是对 Rails 的精彩介绍,它将回答所有这些问题,并帮助您快速成为一名非常可靠的 Rails 程序员。

    其次,这里有一些基本的答案给你:

    1) 你不应该浏览到 products/create ,您只需浏览到 products/new .每当您浏览到一个 URL 时,您都会发送一个 GET 请求。 "new"操作需要 GET 请求,但 CREATE 操作需要 POST 请求。 POST 请求是通过提交表单生成的。

    因此,流程是这样的:

    NEW 操作用于创建适合相关模型(产品)的表单。当您从 products/new 提交表单时它将 POST 到 products/create ,这将触发 CREATE 操作中的代码。

    NEW 和 CREATE 之间的关系反射(reflect)在 EDIT 和 UPDATE 中。即,要更改浏览到的对象 products/123/edit ,然后您提交一个触发 UPDATE 操作的表单。

    这一切都属于所谓的“RESTful”设计,这实际上是 Rails 工作原理的核心。您可能想了解有关 REST 的更多信息,here's a good place to start .

    2) form_for从 Controller 获取数据——但在 NEW 操作的情况下,它没有获取数据,只是一个空(新)对象。 form_for是一个助手,它接收一个对象,并从该对象确定一些需要发生的 HTML,以便生成的表单与您的 Controller 正确交互。

    当您在 products/edit 加载页面时会发生同样的事情,但不同的是如果你通过 form_for一个现有的(不是新的)对象,它将用对象中的现有值填充表单的字段。

    3) 控制权的转移是通过 HTML 中设置的 HTTP 请求进行的 <form>标签。这是 rails 的“魔法”的一部分,它为您处理浏览器和 Controller 之间的链接,因此您不必担心。

    4) 我通常不使用 redirect_to(@product) ,但我希望它会将您带到您刚刚创建的产品的页面,即:products/123其中 123 是产品的 ID。

    我希望这会有所帮助,但请考虑选择 Beginning Rails 一书:它非常好,您可以在大约一周内完成它,并且通过在坚实的基础上开始而不是四处游荡,您将节省大量时间像这样的代码对你来说是完全陌生的。

    关于ruby-on-rails - ruby on rails 基础帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4574752/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com