【问题标题】:Ruby on Rails basic tipsRuby on Rails 基本技巧
【发布时间】:2014-10-24 17:42:19
【问题描述】:

我是 Ruby on Rails 语言的新手,如果可能的话,我真的需要有人向我解释一些“主题”。 我已经创建了一个应用程序,并为它搭建了脚手架,它在控制器中创建了很多代码,但我有疑问。 其中之一是:

到目前为止,这个应用程序是“空的”。它的第一页只有一本“新书”。

//书籍\index.html.erb

||| |||

new_book_path 将我重定向到 books_controller

定义新 @book = Book.new

respond_to do |format| //-----> What means this 'format'?  
  format.html # new.html.erb // What really mean two options for 'format'?
  format.json { render json: @book } // What means render json: @book
end

#new.html.erb -> 里面有这段代码

新作者

/*

*/

谁能解释一下这里发生了什么?

我知道这些问题很愚蠢,但我不明白。

提前致谢。

【问题讨论】:

标签: ruby-on-rails ruby controller


【解决方案1】:

深入了解 Rails 的两种最佳方式是阅读其代码 (https://github.com/rails/rails) 和阅读文档 (http://api.rubyonrails.orghttp://guides.rubyonrails.org)。 因此,您可以在此处找到足够的信息来涵盖此主题:http://api.rubyonrails.org/classes/ActionController/MimeResponds.html 或此处:http://guides.rubyonrails.org/action_controller_overview.html

但如果你想要简短的回答...听听故事:) 整个respond_to do ... end 块负责定义有关您的应用程序应如何响应不同“格式”的规则。 Rails 支持很多不同的格式,例如:html:json:xml(您甚至可以定义自己的格式)。除了 mime 类型,它还有变体::desktop:tablet:phone。显然,使用 mime 类型可以描述您希望如何回答不同类型的请求,使用变体可以为各种用户代理指定不同的选项。 传递给块的:format 变量的类型为ActionController::MimeResponds::Collector。他们没有这么称呼它。它收集您在块内指定的所有不同响应类型,然后使用 http 请求中的 headers 部分从该选项中选择适当的变体。 希望它有用。但同样,最好检查文档。

Rails 使用 MVC 模式作为其基础 ([http://en.wikipedia.org/wiki/Model–view–controller])。所以我们之前看到的是一个控制器。您可以将new.html.erb 视为该控制器的:new 操作的视图。 该文件本身是一个带有 ERB 风格的 html 文件(与 Epic Rap Battles of History 不同,而是 [http://en.wikipedia.org/wiki/ERuby])模板引擎。 ERB 能够将大量 ruby​​ 代码注入到您的页面中。 <% %> 封闭标签仅用于评估,<%= %> 用于注入评估结果。因此,在您使用<%= render 'form' %> 的情况下,您将#render 方法调用的结果注入您的html 并使用:link_to 帮助您创建链接。

结论:我建议您从https://www.railstutorial.org 开始。对于初学者来说,这是一个很好的教程。您会找到大部分问题的答案,甚至可以开发自己的小 Twitter! (至少第 2 版是关于 Twitter)。

【讨论】:

  • 非常感谢您的帮助;)
【解决方案2】:
  • respond_to 是一个 Rails 控制器方法(此处解释:http://api.rubyonrails.org/classes/ActionController/MimeResponds.html#method-i-respond_to),它获取一个块作为参数。简而言之,块是在它被传递到的方法中运行的代码的一部分。
  • 对于一个块,您声明名为“格式”的变量。因为这只是变量名,所以你可以声明它,即“f”或任何你想要的。
  • respond_to 方法块中,您可以声明控制器操作如何响应给定的MIME 类型。因此,对于 HTML,您可以将其留空,但是如果您希望控制器响应 JSON(MIME:application/json 并且您在客户端的请求标头中定义它),那么您必须告诉控制器这是响应必须是 json 格式。

【讨论】:

  • 首先,谢谢。 “......那么你必须告诉你的控制器响应必须是 json 格式......” ---> render json: @book, then?
  • 我感觉到一些后续问题即将出现 :)
  • render 是这个故事的另一部分。简而言之,render 方法告诉你的控制器动作,什么数据应该作为请求响应返回给客户端。 render json: @book 将序列化的书呈现为 JSON 对象。另见guides.rubyonrails.org/layouts_and_rendering.html#using-render
猜你喜欢
  • 2023-03-08
  • 2011-02-03
  • 2011-01-21
  • 1970-01-01
  • 1970-01-01
  • 2013-09-07
  • 1970-01-01
  • 1970-01-01
  • 2011-01-31
相关资源
最近更新 更多