在Rails中使用partials

Enr*_*ent 1 ruby ruby-on-rails ruby-2.0 ruby-on-rails-4

我正在按照这个官方指南来了解Rails,它建立了一个博客,我注意到它似乎并不完整.

在第5.13点"使用部分来清理视图中的重复",它建议采用表单创建一个帖子并在部分内部进行编辑,因为两者都非常相似.它确实谈到了两种形式使用的路线的细微差别,但它表示这是一个将在后面解释的问题

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

但我注意到指南从未真正解释过如何做到这一点.(也许他们只是忘了......?)

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

Ern*_*est 5

如果您遵循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.rbfi中定义了资源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]
Run Code Online (Sandbox Code Playgroud)

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