我是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 %>
答案 0 :(得分:2)
我的期望是:
<% form_for %> ... <% end %>
你的期望有些可以理解,但错了。
每个form_for
都需要匹配end
。
如果您不在form_for上使用<%=
,则不会打印它。仍然会生成所有,但你不会看到它。
您可以尝试其他标记语言,例如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
)
如果你想使用条件,你会:
- ['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)
只有开始标记有=来显示是否应该打印。 不需要打印结束语句。 希望有所帮助!