【问题标题】:Close ruby tag for form_for [closed]关闭 form_for 的 ruby​​ 标记 [关闭]
【发布时间】:2017-07-20 10:16:56
【问题描述】:

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

【问题讨论】:

  • 我期望的不是使用关闭的 ruby​​ 标记是什么意思?
  • 只需编辑问题@Pavan
  • 还不清楚!

标签: html css ruby-on-rails ruby


【解决方案1】:

我的期望是:

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

您的期望在某种程度上是可以理解的,但却是错误的。

  1. 每个form_for 都需要一个匹配的end

  2. 如果你不在 form_for 上使用&lt;%=,那么它就不会被打印出来。仍然会生成,但你不会看到它。

您可以尝试另一种标记语言,例如 HAML。它不需要您关闭大多数东西(因为它依赖缩进来获取有关代码结构的信息)

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

【讨论】:

    【解决方案2】:

    正如 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'
    

    您可以通过编写.something(将呈现&lt;div class="something"&gt; 并等于div.something)或#something(相同但有一个id)来完全省略div。你可以像h2#main-header(渲染&lt;h2 id="main-header"&gt;)一样提及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 模板系统,我发现 HAML 和 SLIM 都比普通的 .erb 更适合。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2011-08-31
        • 2012-11-21
        • 2012-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多