关闭form_for的ruby标记

时间:2017-07-20 10:16:56

标签: html css ruby-on-rails ruby

我是Ruby on rails的新手。

据我所知,这个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 %>

3 个答案:

答案 0 :(得分:2)

  

我的期望是:

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

你的期望有些可以理解,但错了。

  1. 每个form_for都需要匹配end

  2. 如果您不在form_for上使用<%=,则不会打印它。仍然会生成所有,但你不会看到它。

  3. 您可以尝试其他标记语言,例如HAML。它不需要你关闭大多数东西(因为它依赖于缩进来获得有关代码结构的信息)

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

答案 1 :(得分:1)

正如Sergio所说,HAML是普通.erb风格的替代品,SLIM也是如此。

SLIM允许您将该段代码编写为:

= 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'

您可以通过编写div(将呈现.something并等于<div class="something">)或div.something(相同但带有ID)来完全省略#something h2#main-header )。您可以像<h2 id="main-header">(呈现- if something h1= "#{current_user.name} is here" - else p Oops

一样提及html标签

如果你想使用条件,你会:

- ['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>

这将呈现:

var arrProducts = @Model.ViewModel_SessionObject.GetJsonProducts();

它有很多东西,我发现它真的可以减少视图代码并让它更加明显。 IT还有一个额外的好处,你可以简单地复制标记并在jquery中直接使用它作为选择器,或者至少以类似的方式看待它们。

无论哪种方式,一旦你理解了.erb模板系统,我发现HAML和SLIM都比普通的.erb更适合。

答案 2 :(得分:1)

只有开始标记有=来显示是否应该打印。 不需要打印结束语句。 希望有所帮助!