繁体   English   中英

在Rails中使用局部

[英]Using partials in Rails

我正在遵循此官方指南来学习有关Rails的信息,在该地方已构建了博客,并且我发现它似乎还不完整。

在第5.13点“使用局部视图清除视图中的重复项”上,建议使用该表格来创建帖子并在局部视图中进行编辑,因为两者是如此相似。 它确实说明了两种形式都使用的路线之间的细微差别,但是它说这是一个问题,稍后将进行解释。

除了form_for声明外,其他所有内容均保持不变。 稍后将解释form_for如何在构建表单时找出正确的操作和方法属性。 [...]

但我注意到该指南从未真正说明如何执行此操作。 (也许他们只是忘记了...?)

有人可以解释我该如何解决这个问题?

如果遵循Rails约定,则无需执行任何操作。 在文档( http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-form_for )中对此进行了很好的解释。

但是,如果传递给form_for的记录是一种资源,即它对应于一组RESTful路由,例如使用config / routes.rb中的resources方法定义,则可以进一步简化。 在这种情况下,Rails会简单地从记录本身推断出适当的URL。

基本上,您需要:

  1. 使用form_for助手
  2. 将模型对象传递给它(而不是符号)
  3. 在已定义资源routes.rb网络resources :posts

因此,如果您具有form_for(@post) ,Rails将通过检查@post是否为新记录来确定要使用的路由。

如果您想要一个完整的示例,只需创建一个新的Rails应用并创建任何脚手架:

rails g scaffold User name

您可以检查Rails是否在部分表单中放置了表单: app/views/users/_form.html.erb

如果要深入研究,请检查源代码。 有趣的部分在此文件中

action, method = object.respond_to?(:persisted?) && object.persisted? ? [:edit, :patch] : [:new, :post]

在我们的示例中, @post被分配给object Rails充满了这样的捷径,有时了解它们的最佳方法是查看源代码。 如果您对Ruby熟悉,您通常会发现源代码是文档和指南的更好解释。

<%= form_for @product do |f| %>
.
.
.
<% end %>

当@product是新记录时,Rails会知道它并使用products_path。 但是,当@product存在时,Rails使用product_path(@product)。

它并不能很好地解释它。 如果您在表单的两个版本中查找页面,一个用于new ,一个用于edit您会看到它们在form_for之后有两个不同的代码段,但是它们都传递了@post变量。 在第一种情况下,变量包含一个新的空Post对象。

<%= form_for :post, url: posts_path do |f| %>    

edit版本中,它正在查找记录,将其放入@post变量中并将其传递给表单。

<%= form_for :post, url: post_path(@post), method: :patch do |f| %>    

最终版本(部分版本)没有额外的代码来指示它是new动作还是edit 但是由于URL和调用视图的操作的缘故,Rails知道使用部分表单时将哪些代码包含在表单中。 更多“ Rails魔术”。

<%= form_for @post do |f| %>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM