Why do we use form_for @story do |f| when there is no loop?


#1

we use

(1…10).each do |i|
p i
end

so that a value is “yield” to i in a block…

but what about

<% form_for @story do |f| %>
<%= f.text_field %>
<% end %>

there is no loop at all… why do we need to make it look like a loop?
Can’t we do it without making it look like a loop? (write in another
way)?

Also, must be use a Story instance here? Can’t we just use :story and
achieve the same result? The @story instance is just newly created and
has no data at all – does it actually help creating the form? Can’t
:story suffice already? thanks.


#2

On Sun, May 24, 2009 at 11:32 AM, SpringFlowers AutumnMoon
removed_email_address@domain.invalid wrote:

has no data at all – does it actually help creating the form? Can’t
:story suffice already? thanks.

Both these examples of code use blocks, the first just happens to be a
loop, the second only looks like a loop if your first experience of
blocks is in loops.

I think it’s important that you forget about the loop and focus on
blocks, once you’ve understood blocks, it will no longer look like a
loop and you’ll understand that you really don’t want to write it a
different way (even though it’s possible)

Yes, you can use @story or :story and form_for will figure it out for
you.
Mostly it depends on where you’re using the form, new or edit etc.

Andrew T.
http://ramblingsonrails.com

http://MyMvelope.com - The SIMPLE way to manage your savings


#3

Andrew T. wrote:

On Sun, May 24, 2009 at 11:32 AM, SpringFlowers AutumnMoon
removed_email_address@domain.invalid wrote:

I think it’s important that you forget about the loop and focus on
blocks, once you’ve understood blocks, it will no longer look like a
loop and you’ll understand that you really don’t want to write it a
different way (even though it’s possible)

can i use something like: (just pseudo code)

with (@story) do |f|
f.begin_form
f.textfield :name
f.end_form
end

so i think the block method will save the begin_form and end_form
because it automatically add the begin and end before calling the block.
is that the main benefit?


#4

Marnen Laibow-Koser wrote:

so i think the block method will save the begin_form and end_form
because it automatically add the begin and end before calling the block.
is that the main benefit?

Oh, now I see what you mean about the syntax. Yes, that’s sort of it.
Read more about blocks in Ruby.

yes, what i meant was something like

with_model_give_form (@story) do |f|
  f.begin_form
  f.text_field :name
  f.end_form
end

except the begin_form and end_form can be called within
“with_model_give_form”, so it can become

with_model_give_form (@story) do |f|
  f.text_field :name
end

so it is now the same thing as form_for


#5

SpringFlowers AutumnMoon wrote:
[…]

can i use something like: (just pseudo code)

with (@story) do |f|
f.begin_form
f.textfield :name
f.end_form
end

You already are. Just replace “with” with “form_for” and you’ll see
that the syntax is essentially the same.

so i think the block method will save the begin_form and end_form
because it automatically add the begin and end before calling the block.
is that the main benefit?

Oh, now I see what you mean about the syntax. Yes, that’s sort of it.
Read more about blocks in Ruby.

Best,

Marnen Laibow-Koser
http://www.marnen.org
removed_email_address@domain.invalid