Ruby on Rails基本提示

时间:2014-10-24 07:09:55

标签: ruby-on-rails ruby controller

我是Ruby on Rails语言的新手,我真的需要有人向我解释一些'主题'如果可能的话。 我已经创建了一个应用程序,并且我对它进行了Scaffolded,它在控制器中创建了很多代码,但我对此表示怀疑。 其中之一是:

这个应用程序是空的'至今。它只有一本新书'在第一页。

//书籍\ index.html.erb

||| <%= link_to' New Book',new_book_path%> |||

new_book_path将我重定向到books_controller

def new     @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 - >

中包含此代码

新作者

/ *<%=渲染'表格' %GT;

<%= link_to'返回',authors_path%> * /

有人能解释一下我在这里的所作所为吗?

我知道这些是非常愚蠢的问题,但我没有得到它。

提前致谢。

2 个答案:

答案 0 :(得分:2)

深入理解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请求的标题部分从该选项中选择适当的变体。 希望它有用。但同样,请更好地检查文档。

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能够将大量红宝石代码注入您的页面。 <% %>封闭标记仅用于评估,<%= %>用于注入评估结果。因此,在<%= render 'form' %>的情况下,您将#render方法调用的结果注入到您的html中,并使用:link_to帮助程序创建链接。

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

答案 1 :(得分:1)

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