【问题标题】:Why isn't this provide and yield not working为什么这不提供和收益不起作用
【发布时间】:2018-02-22 08:31:49
【问题描述】:

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

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

生成的错误是隐式符号转换为整数或与关键字确保结尾有关的东西。

这有什么问题。

【问题讨论】:

  • 我很确定你不能传递这样的表格。
  • 那么使用大量提供和收益是不是很糟糕? @SergioTulentsev

标签: ruby-on-rails yield


【解决方案1】:

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

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

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

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

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

一般来说,我认为你想要做的事情是不可能的,即使你可以让它工作,这在可读性和安全性方面都是一个非常糟糕的主意。

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

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

【讨论】:

  • 当然,感谢您告诉我。如果你没有回答,我会浪费时间修补。
猜你喜欢
  • 2016-12-21
  • 1970-01-01
  • 2019-09-19
  • 1970-01-01
  • 1970-01-01
  • 2012-11-17
  • 2019-03-22
相关资源
最近更新 更多