为什么这个 provide 和 yield 不起作用

Why isn't this provide and yield not working

正在尝试将这些传递到表单中。

<% provide(:title,"Edit Type") %>
<% provide(:content,"Edit Type") %>
<% provide(:button,"Update") %>
<% provide(:link,"form_for(@type, url: product_type_path, method: :patch)") %>  <!-- edit for product_type model(@type) url: go to product_type controller with update action -->
<%= render 'form' %>

_form.html.erb

<div class="row">
  <div class="col-md-6 col-md-offset-3">
    <%= yield(:link) do |f| %>  
        <h3><%= yield(:content) %></h3>
        <%= render 'shared/error_messages', object: f.object %>

        <%= f.label :name %>
        <%= f.text_field :name, class: 'form-control' %>

        <%= f.label :value %>
        <%= f.number_field :value, class: 'form-control' %>

        <%= f.submit yield(:button), class: "btn btn-primary" %>
    <% end %>
  </div>
</div>

生成的错误要么是隐式符号转换为整数,要么是与关键字 ensure 结尾相关的错误。

这有什么问题。

:link 下的这个复杂助手不会像您预期的那样工作...

<% provide(:link,"form_for(@type, url: product_type_path, method: :patch)")

所有这一切都将在您的视图中呈现以下字符串...

form_for(@type, url: product_type_path, method: :patch)

你甚至不能做 <%= eval(yield :link) %> 因为你没有块,如果你修改你的字符串以包含 do |f| 它不会将它识别为块的开始无论如何。

一般来说,我认为你想做的事情是不可能的,即使你可以让它工作,就可读性和可能的​​安全性而言,这将是一个非常糟糕的主意。

providecontent_for 是存储简单标记并将其传递到各种视图的好方法,但标记必须是自包含的,并且不能(例如)块的开始。

可以 可能使用它来存储原始 <form ... > 信息,但我看不到它与 form_for 助手一起使用。