尝试将这些传递到表单中。
<% 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' %>
<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结尾相关的内容。
这有什么不妥。
答案 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|
,它就不会认为它是无论如何,开始一个街区。
一般来说,我认为你想要做的事情是不可能的,即使你能使它发挥作用,在可读性和可能的安全性方面也是一个非常糟糕的主意。
provide
和content_for
是存储和向各种视图提供简单标记的好方法,但标记必须是自包含的,并且不能(例如)块的开头。
您可能可能使用它来存储原始<form ... >
信息,但我无法看到它与form_for
帮助程序一起使用。