2017-09-13 5 views
0

動作していない収率。なぜこれが提供されておらず、フォームにこれらを通過しようと

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

生成されたエラーは、暗黙のシンボルの整数値に変換またはキーワードの終わりに関連する何かを確実のいずれかです。この中に間違っている何

:linkの下で、この複雑なヘルパーは、あなたが期待するように動作するつもりはない

+0

私はあなたがそのようなフォームを渡すことはできません確信しています。 –

+0

それでは、多くの提供と利回りを使うのは悪いですか? @SergioTulentsev –

答えて

1

...

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

すべてこれはあなたのビューで次の文字列をレンダリングしているでしょう...

のform_forあなたがブロックを持っていないので、あなたも<%= eval(yield :link) %>を行うことはできません

(@type、URL:product_type_path、方法:パッチ)、そしてあなたがモディ場合あなたの文字列にdo |f|を含めると、それはブロックの開始として認識されませんでした。

は一般的に、私は何がやりたいことは不可能であり、そしてあなたはそれを動作させることができたとしても、それは読みやすさ、そしておそらくセキュリティの面で本当に悪いアイデアだと思います。

providecontent_forは、シンプルなマークアップをさまざまなビューに保存して配信するうえで便利ですが、マークアップは自己完結型でなければならず、ブロックの先頭などはできません。

あなたはは、おそらく生<form ... >情報を保存するためにそれを使用することができますが、私はそれがform_forヘルパーと一緒に使用されて見ることができません。

+0

確かに、私に知らせてくれてありがとう。あなたが答えなかったら私は時間を無駄にしてしまいました。 –

関連する問題