Hello. I created a form and it always throw the ‘Title can’t be blank’
error, even if I filled it.
What is wrong?
Thanks,
Gabriel.
new.html.erb
Welcome
<% form_for(@sfile) do |f| %>
<%= f.error_messages %>
<%= f.label :title %>
<%= f.text_field :title %>
<%= f.label :description %>
<%= f.text_area :description %>
<%= f.submit 'Create' %>
<% end %>
sfile.rb
class Sfile < ActiveRecord::Base
validates_presence_of :title
end
sfiles_controller.rb
class SfilesController < ApplicationController
def new
@sfile = Sfile.new
end
def create
@sfile = Sfile.new(params[:product])
respond_to do |format|
if @sfile.save
flash[:notice] = ‘File was successfully created.’
format.html { redirect_to(@sfile) }
else
format.html { render :action => “new” }
end
end
end
def show
@sfile = Sfile.find(params[:id])
end
end
On Fri, 2009-07-31 at 07:46 -0700, Gabriel B. wrote:
# sfile.rb
@sfile = Sfile.new
end
end
end
def show
@sfile = Sfile.find(params[:id])
end
end
try…
<% form_for(@sfile) do |f| %>
<%= f.error_messages %>
<%= f.label :title %>
<%= f.text_field :product, :title %>
<%= f.label :description %>
<%= f.text_area :product, :description %>
<%= f.submit 'Create' %>
<% end %>
Craig
–
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.
On Jul 31, 2009, at 10:59 AM, Craig W. wrote:
<%= f.text_field :title %>
class SfilesController < ApplicationController
def new
@sfile = Sfile.new
end
def create
@sfile = Sfile.new(params[:product])
You didn’t fix :product on this line to be :sfile. Take a look at the
source that your form has generated and you should see the title field
has a name like: “sfile[title]”
def show
<%= f.label :title %>
Craig
–
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.
Rob B. http://agileconsultingllc.com
[email protected]
+1 513-295-4739
Skype: rob.biedenharn
It doesn’t work… I get this:
NoMethodError in Sfiles#new
Showing app/views/sfiles/new.html.erb where line #8 raised:
undefined method `merge’ for :title:Symbol
Extracted source (around line #8):
5:
6:
7: <%= f.label :title %>
8: <%= f.text_field :product, :title %>
9:
10:
11: <%= f.label :description %>
Rob, I still get the same error…
NoMethodError in Sfiles#new
Showing app/views/sfiles/new.html.erb where line #8 raised:
undefined method `merge’ for :title:Symbol
Extracted source (around line #8):
5:
6:
7: <%= f.label :title %>
8: <%= f.text_field :sfile, :title %>
9:
10:
11: <%= f.label :description %>
2009/7/31 Craig W. [email protected]:
  <%= f.text_field :title %>
class SfilesController < ApplicationController
    def new
        @sfile = Sfile.new
    end
    def create
        @sfile = Sfile.new(params[:product])
Should this be params[:sfile]? I am not sure where product comes in.
Have a look in the log file (log/development.log) to see what
parameters are being posted.
    def show
  <%= f.label :title %>
  <%= f.text_field :product, :title %>
I think the OP had this bit correct as it is f.text_field not just
text_field
Colin
Changing back to my original code, i get this in the log:
[4;36;1mSQL (0.0ms) [0m [0;1mSET NAMES ‘utf8’ [0m
[4;35;1mSQL (0.0ms) [0m [0mSET SQL_AUTO_IS_NULL=0 [0m
Processing SfilesController#create (for 127.0.0.1 at 2009-07-31
12:12:26) [POST]
Parameters: {“commit”=>“Create”, “authenticity_token”=>“cS/
xZND8RchwVPTwbGcE7HJe5ZndhyutqCVycX20vBQ=”, “sfile”=>{“title”=>“Test
Title”, “description”=>“”}}
[4;36;1mSfile Columns (0.0ms) [0m [0;1mSHOW FIELDS FROM sfiles
[0m
[4;35;1mSQL (0.0ms) [0m [0mBEGIN [0m
[4;36;1mSQL (0.0ms) [0m [0;1mROLLBACK [0m
Rendering sfiles/new
Completed in 15ms (View: 0, DB: 0) | 200 OK [http://localhost/sfiles]
[4;35;1mSQL (0.0ms) [0m [0mSET NAMES ‘utf8’ [0m
[4;36;1mSQL (0.0ms) [0m [0;1mSET SQL_AUTO_IS_NULL=0 [0m
Processing SfilesController#create (for 127.0.0.1 at 2009-07-31
12:12:31) [POST]
Parameters: {“commit”=>“Create”, “authenticity_token”=>“cS/
xZND8RchwVPTwbGcE7HJe5ZndhyutqCVycX20vBQ=”, “sfile”=>{“title”=>“”,
“description”=>“”}}
[4;35;1mSfile Columns (0.0ms) [0m [0mSHOW FIELDS FROM sfiles
[0m
[4;36;1mSQL (0.0ms) [0m [0;1mBEGIN [0m
[4;35;1mSQL (0.0ms) [0m [0mROLLBACK [0m
Rendering sfiles/new
Completed in 15ms (View: 0, DB: 0) | 200 OK [http://localhost/sfiles]
2009/7/31 Gabriel B. [email protected]:
xZND8RchwVPTwbGcE7HJe5ZndhyutqCVycX20vBQ=“, “sfile”=>{“title”=>“Test
Title”, “description”=>”"}}
As you can see the parameters are being sent back as sfile which is
what you would expect, so as I and Rob suggested it should be @sfile
= Sfile.new(params[:sfile]). Why have you got :product?
Colin
Should this be params[:sfile]? I am not sure where product comes in.
Have a look in the log file (log/development.log) to see what
parameters are being posted.
I’m going back to your original message. The answer that you got from
Craig had you changing the view, but ALL that you needed to do was fix
the line in the create action to replace :product with :sfile (since
the class of the object in the form is Sfile)
-Rob
On Jul 31, 2009, at 10:46 AM, Gabriel B. wrote:
This is what your view should look like:
# sfile.rb
@sfile = Sfile.new
end
def create
@sfile = Sfile.new(params[:product])
Just change this line to:
@sfile = Sfile.new(params[:sfile])
def show
@sfile = Sfile.find(params[:id])
end
end
Rob B. http://agileconsultingllc.com
[email protected]
Gabriel B. wrote:
It’s working! Thank you very much…
I used :product because I saw that in a tutorial.
That response tells me that you have to slow down and think about what
you’re doing, not just type in code because you saw it somewhere else…
You’re talking about “sfiles” and the tutorial you saw is talking about
“products”… why would you expect their code to work in your app?
Find a good tutorial, or a good book (Agile Web D. with Rails
springs to mind), and read it for understanding… you know, concepts.
Don’t just type in what you see, because all that proves when it works
is that you’d make a good code-monkey, typing what you’re told.
Perhaps a good place to start would be a new Rails application…
In that application directory scaffold up a very basic model…
ruby script/generate scaffold person first_name:string last_name:string
Now go look through model, the controller, and the views created for you
to see how it all fits together. I wouldn’t use scaffold to build a
production application, but as an instructional tool for beginners, its
great.
It’s working! Thank you very much…
I used :product because I saw that in a tutorial. I 'm new with rails.
Thanks again.
2009/7/31 Gabriel B. [email protected]:
Thanks for the instructions… I’ll try to buy that book…
Make sure you get the third edition. Also the online ruby on rails
guides are very good, as are the railscasts. Google will find them.
Colin
Thanks for the instructions… I’ll try to buy that book…
Just another "cut and paste" effect...
I agree about "Agile Development with Rails" is a great book....
...but you shoud not cut all of the examples in it...and paste them to
your application...
Ar Chron escribió:
Gabriel B. wrote:
It's working! Thank you very much...
I used :product because I saw that in a tutorial.
That response tells me that you have to slow down and think about what
you're doing, not just type in code because you saw it somewhere else...
You’re talking about “sfiles” and the tutorial you saw is talking about
“products”… why would you expect their code to work in your app?
Find a good tutorial, or a good book (Agile Web D. with Rails
springs to mind), and read it for understanding… you know, concepts.
Don’t just type in what you see, because all that proves when it works
is that you’d make a good code-monkey, typing what you’re told.
Perhaps a good place to start would be a new Rails application…
In that application directory scaffold up a very basic model…
ruby script/generate scaffold person first_name:string last_name:string
Now go look through model, the controller, and the views created for you
to see how it all fits together. I wouldn’t use scaffold to build a
production application, but as an instructional tool for beginners, its
great.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Ruby on Rails: Talk" group.
To post to this
group, send email to
[email protected] To
unsubscribe from this group, send email to
[email protected] For more options,
visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---