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.
winter h. (Guest)
on 2009-05-24 13: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.
Andrew T. (Guest)
on 2009-05-24 13:38
(Received via mailing list)
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
winter h. (Guest)
on 2009-05-24 16:58
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?
Marnen L. (Guest)
on 2009-05-24 17: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
removed_email_address@domain.invalid
winter h. (Guest)
on 2009-05-24 17: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.