为什么这不提供并且不起作用

时间:2017-09-13 14:56:00

标签: ruby-on-rails yield

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

<% 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>

生成的错误是隐式符号转换为整数或与关键字end结尾相关的内容。

这有什么不妥。

1 个答案:

答案 0 :(得分:1)

: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帮助程序一起使用。