我们用
(1..10).each do |i|
p i
end
Run Code Online (Sandbox Code Playgroud)
所以一个值在块中"收益"到i ...
但是关于
<% form_for @story do |f| %>
<%= f.text_field :name %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
根本没有循环...为什么我们需要让它看起来像一个循环?如果不让它看起来像一个循环,我们不能这样做吗?(用另一种方式写)?
另外,必须在这里使用Story实例吗?我们不能只使用:故事并取得同样的结果吗?@story实例刚刚新创建,根本没有数据 - 它是否真的有助于创建表单?不能:故事已经足够了?谢谢.
更新:
这个想法类似于:(只是伪代码)
with_model_give_form (@story) do |f|
f.begin_form
f.text_field :name
f.end_form
end
Run Code Online (Sandbox Code Playgroud)
所以我认为block方法将保存begin_form和end_form,因为它会在调用块之前和之后自动添加开始和结束.这是主要的好处吗?
我认为你误解了Ruby在这种情况下的工作方式.
确实,你把所有东西放在一个块中,但它与循环无关.
你到底做了什么
(1..10).each do |i|
p i
end
Run Code Online (Sandbox Code Playgroud)
正在创建块{|i| p(i); }并将其发送到函数Range.each()
它是一回事form_for.你实际做的是创建块{|f| puts( f.text_field(:name)); }并将其传递给form_for函数.(现在它不使用puts,但是一些字符串连接,但你明白了).
所以它基本上不是一个循环,而是一个lambda函数,在循环中调用时会多次调用.
更新: 关于您的更新.在某种程度上,是的,这是主要的好处.这不完全正确,但你明白了.该块(以及许多其他块)的目的是使代码更易于阅读和理解.并且还要加快发展.
始终寻求将代码划分为块,只需查看函数,类和其他语句的概念.
例如,form_for主要是为了加快发展.是的,它会创建开始和结束标记,但这不是全部.
<% form_for @story do |f| %>
<%= f.text_field :name -%>
<% end %>
Run Code Online (Sandbox Code Playgroud)
实际上可以这样写:
<form action="<%= polymorphic_edit_path(@story) -%>"
id="<%= @story.class_name.underscore -%>">
<%= text_field :story, :name -%>
</form>
Run Code Online (Sandbox Code Playgroud)
当然,它不完全是这样,这是一个很简化的form_for功能,而且功能可以做很多,但至少你应该得到图片.
| 归档时间: |
|
| 查看次数: |
602 次 |
| 最近记录: |