Form not working...

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.

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 <h1>Welcome</h1>

<% form_for(@sfile) do |f| %>   <%= f.error_messages %>

  <p>     <%= f.label :title %><br />     <%= f.text_field :title %>   </p>   <p>     <%= f.label :description %><br />     <%= f.text_area :description %>   </p>   <p>     <%= f.submit 'Create' %>   </p> <% 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

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 <h1>Welcome</h1>

<% form_for(@sfile) do |f| %> <%= f.error_messages %>

<p>    <%= f.label :title %><br />    <%= f.text_field :title %> </p> <p>    <%= f.label :description %><br />    <%= f.text_area :description %> </p> <p>    <%= f.submit 'Create' %> </p> <% 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])

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]"

     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

---- try...

<% form_for(@sfile) do |f| %> <%= f.error_messages %>

<p>    <%= f.label :title %><br />    <%= f.text_field :product, :title %> </p> <p>    <%= f.label :description %><br />    <%= f.text_area :product, :description %> </p> <p>    <%= f.submit 'Create' %> </p> <% end %>

Craig

-- This message has been scanned for viruses and dangerous content by MailScanner, and is believed to be clean.

>

Rob Biedenharn http://agileconsultingllc.com Rob@AgileConsultingLLC.com +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: <p> 7: <%= f.label :title %><br /> 8: <%= f.text_field :product, :title %> 9: </p> 10: <p> 11: <%= f.label :description %><br />

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 <h1>Welcome</h1>

<% form_for(@sfile) do |f| %> <%= f.error_messages %>

<p> <%= f.label :title %><br /> <%= f.text_field :title %> </p> <p> <%= f.label :description %><br /> <%= f.text_area :description %> </p> <p> <%= f.submit 'Create' %> </p> <% 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\]\)

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.

           respond\_to do |format|
                   if @sfile\.save
                           flash\[:notice\] = &#39;File was successfully created\.&#39;
                           format\.html \{ redirect\_to\(@sfile\) \}
                   else
                           format\.html \{ render :action =&gt; &quot;new&quot; \}
                   end
           end
   end

   def show
           @sfile = Sfile\.find\(params\[:id\]\)
   end

end

---- try...

<% form_for(@sfile) do |f| %> <%= f.error_messages %>

<p> <%= f.label :title %><br /> <%= f.text_field :product, :title %>

I think the OP had this bit correct as it is f.text_field not just text_field

Colin

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: <p> 7: <%= f.label :title %><br /> 8: <%= f.text_field :sfile, :title %> 9: </p> 10: <p> 11: <%= f.label :description %><br />

Changing back to my original code, i get this in the log:

  e[4;36;1mSQL (0.0ms)e[0m e[0;1mSET NAMES 'utf8'e[0m   e[4;35;1mSQL (0.0ms)e[0m e[0mSET SQL_AUTO_IS_NULL=0e[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"=>""}}   e[4;36;1mSfile Columns (0.0ms)e[0m e[0;1mSHOW FIELDS FROM `sfiles`e [0m   e[4;35;1mSQL (0.0ms)e[0m e[0mBEGINe[0m   e[4;36;1mSQL (0.0ms)e[0m e[0;1mROLLBACKe[0m Rendering sfiles/new Completed in 15ms (View: 0, DB: 0) | 200 OK [http://localhost/sfiles\]   e[4;35;1mSQL (0.0ms)e[0m e[0mSET NAMES 'utf8'e[0m   e[4;36;1mSQL (0.0ms)e[0m e[0;1mSET SQL_AUTO_IS_NULL=0e[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"=>""}}   e[4;35;1mSfile Columns (0.0ms)e[0m e[0mSHOW FIELDS FROM `sfiles`e [0m   e[4;36;1mSQL (0.0ms)e[0m e[0;1mBEGINe[0m   e[4;35;1mSQL (0.0ms)e[0m e[0mROLLBACKe[0m Rendering sfiles/new Completed in 15ms (View: 0, DB: 0) | 200 OK [http://localhost/sfiles\]

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"=>""}}

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

It's working! Thank you very much...

I used :product because I saw that in a tutorial. I 'm new with rails.

Thanks again.

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

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.

----------------------------

This is what your view should look like:

# new.html.erb <h1>Welcome</h1>

<% form_for(@sfile) do |f| %> <%= f.error_messages %>

<p>    <%= f.label :title %><br />    <%= f.text_field :title %> </p> <p>    <%= f.label :description %><br />    <%= f.text_area :description %> </p> <p>    <%= f.submit 'Create' %> </p> <% 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])

Just change this line to:                    @sfile = Sfile.new(params[:sfile])

     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

Rob Biedenharn http://agileconsultingllc.com Rob@AgileConsultingLLC.com

Gabriel Bianconi 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 Development 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.

Thanks for the instructions.... I'll try to buy that book...

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

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ó: