Form Tags

Hi Pete,

This is a total newbie question, so my apologies!

No need. Welcome aboard!

I am learning Ruby from the book Ruby for rails - the only issue is the examples seem to have been written in a earlier version of Ruby.

Very common issue.

I appreciate that the end_form_tag has been depreciated, I tried replacing it with <% end %>

Which then gives

compile error /Users/pmoran/rails/r4music1/app/views/customer/_login.html.erb:9: syntax error, unexpected kENSURE, expecting $end

<% end %> is correct.

I believe your problem is that if you're going to use the :controller/:action syntax, you need to enclose them in {}. e.g.,

<%= form_tag {:controller => "customer", :action => "login"} %>

You'll want to learn to use Google as your first lines of defense :wink: I recommend that whenever you get an error, you enter it into your Google search bar preceded by the word 'rails'.

using the above as an example... Google

rails syntax error, unexpected kENSURE, expecting $end

You'll also want to learn to read the rails documentation.

api.rubyonrails.org

Focus first on the methods which are in the lower pane on the left.

I can't see any examples on the documentation which also specify the controller, as I say I am a total Ruby newbie so please go easy on me here!

The easiest way to get a handle on some of this basic stuff is to use the scaffold feature. You'll get the full stack. I recommend generating a rails app named 'sandbox'. Keep it around for working out issues / problems later.

rails sandbox

rake db:create:all

ruby script/scaffold test_model field1:string field2:text field3:integer

The files generated will give you the basics of the current syntax.

HTH, Bill

Thanks Bill,

I did try google first, but didn't find the correct answer :slight_smile:

OK - I tried what you said, but that seemed to give me a new problem :frowning:

    <%= form_tag {:controller => "customer", :action => "login"} %>

    <p>User name: <%= text_field "customer", "nick" %></p>     <p>Password: <%= password_field "customer", "password" %></p>     <p><input type="Submit", value="Log in"/></p>      <% end %>   </p>

Error now is

syntax error, unexpected tASSOC, expecting '}' ...cat(( form_tag {:controller => "customer", :action => "login...                               ^ /Users/pmoran/rails/r4music1/app/views/customer/_login.html.erb:1: syntax error, unexpected ',', expecting '}' ...ag {:controller => "customer", :action => "login"} ).to_s); ...                               ^ /Users/pmoran/rails/r4music1/app/views/customer/_login.html.erb:9: syntax error, unexpected kENSURE, expecting $end

In terms of the scaffold stuff, well I also tried that and got a error :frowning:

rake db:create:all rake aborted! No Rakefile found (looking for: rakefile, Rakefile, rakefile.rb, Rakefile.rb) /opt/local/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2377:in `raw_load_rakefile' (See full trace by running task with --trace)

And then

ruby script/scaffold test_model field1:string field2:text field3:integer ruby: No such file or directory -- script/scaffold (LoadError)

Hi Pete,

It looks like you have more than one problem. For starters, what platform are you using? OS, Ruby, Rails

ruby -v rails -v

Thanks Bill,

You're welcome.

I did try google first, but didn't find the correct answer :slight_smile:

OK - I tried what you said, but that seemed to give me a new problem :frowning:

    <%= form_tag {:controller => "customer", :action => "login"} %>

    <p>User name: <%= text_field "customer", "nick" %></p>     <p>Password: <%= password_field "customer", "password" %></p>     <p><input type="Submit", value="Log in"/></p>      <% end %>   </p>

Error now is

syntax error, unexpected tASSOC, expecting '}' ...cat(( form_tag {:controller => "customer", :action => "login...                               ^ /Users/pmoran/rails/r4music1/app/views/customer/_login.html.erb:1: syntax error, unexpected ',', expecting '}' ...ag {:controller => "customer", :action => "login"} ).to_s); ...                               ^ /Users/pmoran/rails/r4music1/app/views/customer/_login.html.erb:9: syntax error, unexpected kENSURE, expecting $end

As a first step, try wrappiing the {..} in parens.
form_tag( {:controller => "customer", :action => "login"}

If that doesn't fix it, post the whole view file.

In terms of the scaffold stuff, well I also tried that and got a error :frowning:

My bad. Incomplete / incorrect instructions.

rails sandbox # this assumes you're ok with sqlite, otherwise,                # use -d to specify your database of choice

cd sandbox # beyond the initial step of creating your rails                # app, all other commands must take place within                # an app directory

rake db:create:all

# even had you been in an app directory, the command I sent # was incorrect. use the following instead.

ruby script/generate scaffold test_model field1:string field2:text field3:integer

rake db:create:all rake aborted! No Rakefile found (looking for: rakefile, Rakefile, rakefile.rb, Rakefile.rb) /opt/local/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2377:in `raw_load_rakefile' (See full trace by running task with --trace)

And then

ruby script/scaffold test_model field1:string field2:text field3:integer ruby: No such file or directory -- script/scaffold (LoadError)

Both of these occurred because you weren't in the sandbox app directory.

HTH, Bill