2017-09-13 4 views
0

Essayer de les passer dans le formulaire.Pourquoi cela ne fournit-il pas et le rendement ne fonctionne pas

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

L'erreur est générée est la conversion soit symbole implicite entier ou quelque chose lié à la fin du mot-clé assurer.

Qu'est-ce qui ne va pas?

+0

Je suis sûr que vous ne pouvez pas passer des formes comme ça. –

+0

est-il donc mauvais d'utiliser beaucoup de fournir et de rendement? @SergioTulentsev –

Répondre

1

Cette aide complexe sous :link ne va pas fonctionner comme prévu ...

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

Tout cela va faire est de rendre la chaîne suivante dans votre vue ...

form_for (@type, url: product_type_path, méthode:: patch)

vous ne pouvez même faire <%= eval(yield :link) %> parce que vous ne disposez pas d'un bloc, et si vous modi Fied votre chaîne pour inclure do |f| il ne le reconnaîtrait pas comme le début d'un bloc de toute façon.

Généralement, je pense que ce que vous voulez faire est impossible, et même si vous pouviez le faire fonctionner, ce serait une très mauvaise idée en termes de lisibilité, et peut-être de sécurité. Les codes provide et content_for sont un bon moyen de stocker et de fournir un balisage simple à diverses vues, mais le balisage doit être autonome et ne peut pas être (par exemple) le début d'un bloc.

Vous pouvez utiliser éventuellement pour stocker les informations <form ... > brutes, mais je ne peux pas le voir utilisé avec l'aide form_for.

+0

sûr, merci de me le faire savoir. J'aurais perdu du temps à bricoler si tu n'avais pas répondu. –