Forum: Ruby on Rails why do we use form_for @story do |f| when there is no loop?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Eb71c362ddeda80c2668d2575e97bc70?d=identicon&s=25 winter heat (winterheat)
on 2009-05-24 11:32
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.
5772c599ccab3081e0fffb1d54f3b6de?d=identicon&s=25 Andrew Timberlake (andrewtimberlake)
on 2009-05-24 11:38
(Received via mailing list)
On Sun, May 24, 2009 at 11:32 AM, SpringFlowers AutumnMoon
<rails-mailing-list@andreas-s.net> 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 Timberlake
http://ramblingsonrails.com

http://MyMvelope.com - The SIMPLE way to manage your savings
Eb71c362ddeda80c2668d2575e97bc70?d=identicon&s=25 winter heat (winterheat)
on 2009-05-24 14:58
Andrew Timberlake wrote:
> On Sun, May 24, 2009 at 11:32 AM, SpringFlowers AutumnMoon
> <rails-mailing-list@andreas-s.net> 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?
Dd2d775dea75b381edb1bbf0600a0907?d=identicon&s=25 Marnen Laibow-Koser (marnen)
on 2009-05-24 15:05
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
marnen@marnen.org
Eb71c362ddeda80c2668d2575e97bc70?d=identicon&s=25 winter heat (winterheat)
on 2009-05-24 15:08
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
This topic is locked and can not be replied to.