2017-07-20 16 views
-3

私はRuby on railsの初心者です。ruby​​タグfor form_for

私が知っているように、このRubyタグ<%=%>は、関数を呼び出したり印刷したりするときに使用されます。のみ。

しかし、私はform_forを使用し、IDEは私が期待して何<% end %>

<%= form_for(@article, :html => {class: 'form-horizontal', role: 'form'}) do |f| %> 
    <div class="form-group"> 
     <div class="control-label col-sm-2"> 
     <%= f.label :title %> 
     </div> 

     <div class="col-sm-8"> 
     <%= f.text_field :title, class: 'form-control', placeholder: 'Title of article', autofocus: true %> 
     </div> 
    </div> 

    <div class="form-group"> 
     <div class="control-label col-sm-2"> 
     <%= f.label :description %> 
     </div> 

     <div class="col-sm-8"> 
     <%= f.text_area :description, rows: 10, class: 'form-control', placeholder: 'Body of article', autofocus: true %> 
     </div> 
    </div> 

    <div class="form-group"> 
     <div class="col-sm-offset-2 col-sm-10"> 
     <%= f.submit class: 'btn btn-primary btn-lg' %> 
     </div> 
    </div> 
<% end %> 

を追加するために私に尋ねることである:

<% form_fo %> 
... 
<% end %> 
+0

**ルビータグを使用していない**と思われるもの**? – Pavan

+0

ちょうど質問を編集@Pavan –

+0

それはまだクリアされていません! – Pavan

答えて

2

私は期待してどのようなものです:

<% form_for %> 
... 
<% end %> 

あなたの期待はやや理解できますが、間違っています。

  1. マッチングendを必要とform_for各。

  2. <%=をform_forに使用しないと、印刷されません。まだ生成され、すべてが表示されますが、表示されません。

たとえば、HAMLのような別のマークアップ言語を試すことができます。 (これはコードの構造に関する情報を導き出すために、インデントに依存しているため)セルジオ、HAMLで述べたようにこれは、通常の.erbスタイルに代わるものですので、SLIMで最も何かを閉鎖する

= form_for ... do |f| 
    = f.label ... 
1

をする必要はありません。あなたは同じ.something<div class="something">をレンダリングし、div.somethingに等しいされます)または#somethingを(書くことによって完全にdivを省略したが、IDとすることができます

= form_for(@article, :html => {class: 'form-horizontal', role: 'form'}) do |f| 
    .form-group 
    .control-label.col-sm-2 
     = f.label :title 

    .col-sm-8 
     = f.text_field :title, class: 'form-control', placeholder: 'Title of article', autofocus: true 

    .form-group 
    .control-label.col-sm-2 
     = f.label :description 

    .col-sm-8 
     = f.text_area :description, rows: 10, class: 'form-control', placeholder: 'Body of article', autofocus: true 

    .form-group 
    .col-sm-offset-2.col-sm-10 
     = f.submit class: 'btn btn-primary btn-lg' 

SLIMは、あなたのように、コードのその部分を書くことができるようになります)。あなたが条件を使用したい場合は、あなたが(<h2 id="main-header">をレンダリングする)

単にh2#main-headerのようなhtmlタグを言及することができますでしょう:

- if something 
    h1= "#{current_user.name} is here" 
- else 
    p Oops 

あなたがブロックリターン自体を印刷せずにブロックを実行したい場合は、しかし、ブロック内だけの事は:

- ['chachacha','chuchuchu'].each_with_index do |thing, i| 
    p= i == 0 ? 'Chachacha is not chuchuchu' : 'Chuchuchu is not chachacha' 

これは、レンダリングされます:

<p>Chachacha is not chuchuchu</p> 
<p>Chuchuchu is not chachacha</p> 

それはたくさんのものがあり、私は実際にビューコードを細くして、それをはるかに知覚できるようにしました。 ITには、マークアップをコピーしてセレクタとしてjquery内でそのまま使用することも、同様の方法でマークアップを表示することもできます。

どちらの方法でも、.erbテンプレートシステムを理解すると、.erbよりもHAMLとSLIMの方が適しています。

1

オープニングタグには、印刷するかどうかを示す=が付いています。 endステートメントは印刷する必要はありません。 希望に役立ちます!

関連する問題