Very confused - scaffold action does - sends NULL to db

Hi, I'm a bit confused with this.
If you follow the steps below in Rails 3:

1- rails new act -d mysql
2- rails g scaffold action name:string
3- rake db:create
4- rake db:migrate
5- rails server

when I add a record to that app I get:

INSERT INTO `actions` (`created_at`, `name`, `updated_at`) VALUES
('2010-11-17 15:23:53', NULL, '2010-11-17 15:23:53')

Note that NULL for the name value. I use as valid string but there is
goes as NULL.

Do another scaffold named act and everything goes fine with no changes.
I could imagine that action is a reserved word but shouldn't it complain
about it?

Any hints?

try added mannually using rails console

$ Action.create(:name => “name example”)

and, post result.

att: Luciano Sousa

http://www.lucianosousa.net
http://twitter.com/lucianosousa

*Ruby on Rails Developer
*Linux User #456387
*Contato: (21) 8418-5945

comopasta Gr wrote in post #962162:

Hi, I'm a bit confused with this.
If you follow the steps below in Rails 3:

1- rails new act -d mysql
2- cd act
3- rails g scaffold action name:string
4- rake db:create
5- rake db:migrate
6- rails server

when I add a record to that app I get:

INSERT INTO `actions` (`created_at`, `name`, `updated_at`) VALUES
('2010-11-17 15:23:53', NULL, '2010-11-17 15:23:53')

What params are showing in your log? What's the controller code that
creates the record? You've provided us with no information that we can
use to help.

Note that NULL for the name value. I use as valid string but there is
goes as NULL.

Do another scaffold named act and everything goes fine with no changes.
I could imagine that action is a reserved word but shouldn't it complain
about it?

Any hints?

Best,

comopasta Gr wrote in post #962162:

Do another scaffold named act and everything goes fine with no changes.
I could imagine that action is a reserved word but shouldn't it complain
about it?

Any hints?

I'd imagine that your use of a reserved word has caused the issue, so
don't.

I am admittedly curious... (but too lazy to spin up my VM at the
moment).

What does the log show for the POSTed values?

Unless you are willing to do the delving into the rails codebase, this
is one of those simple "Don't do that" cases.

Ar Chron wrote in post #962166:

comopasta Gr wrote in post #962162:

Do another scaffold named act and everything goes fine with no changes.
I could imagine that action is a reserved word but shouldn't it complain
about it?

Any hints?

I'd imagine that your use of a reserved word has caused the issue, so
don't.

I'd be surprised if "action" is reserved.

I am admittedly curious... (but too lazy to spin up my VM at the
moment).

What does the log show for the POSTed values?

Unless you are willing to do the delving into the rails codebase, this
is one of those simple "Don't do that" cases.

Not necessarily. There's not enough information yet to jump to that
conclusion.

Best,

Thanks guys,

Of course I could paste all the code here. This uses the generated code
by the scaffold generator. I haven't changed a single line. Anyway, the
main involved action is the create:

  # POST /actions
  # POST /actions.xml
  def create
    @action = Action.new(params[:action])

    respond_to do |format|
      if @action.save
        format.html { redirect_to(@action, :notice => 'Action was
successfully created.') }
        format.xml { render :xml => @action, :status => :created,
:location => @action }
      else
        format.html { render :action => "new" }
        format.xml { render :xml => @action.errors, :status =>
:unprocessable_entity }
      end
    end
  end

Data from the view form:

<%= form_for(@action) do |f| %>
  <% if @action.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@action.errors.count, "error") %> prohibited
this action from being saved:</h2>

      <ul>
      <% @action.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

The relevant log lines:

Started GET "/actions/new" for 127.0.0.1 at 2010-11-17 16:23:47 +0100
  Processing by ActionsController#new as HTML
Rendered actions/_form.html.erb (8.5ms)
Rendered actions/new.html.erb within layouts/application (11.8ms)
Completed 200 OK in 23ms (Views: 15.4ms | ActiveRecord: 0.0ms)

Started POST "/actions" for 127.0.0.1 at 2010-11-17 16:23:53 +0100
  Processing by ActionsController#create as HTML
  Parameters: {"utf8"=>"✓",
"authenticity_token"=>"3uHroG5clvDouL8poeQKErZNEBlCA5s+Row3HXp8lEw=",
"commit"=>"Create Action"}
  SQL (0.6ms) BEGIN
  SQL (1.1ms) describe `actions`
  SQL (0.3ms) INSERT INTO `actions` (`created_at`, `name`,
`updated_at`) VALUES ('2010-11-17 15:23:53', NULL, '2010-11-17
15:23:53')
  SQL (0.7ms) COMMIT
Redirected to http://127.0.0.1:3001/actions/1
Completed 302 Found in 61ms

Yeah, might be a don't do that :slight_smile:
But usually it complain and doesn't let you move on with reserved words
so I was also curious. Also lazy to go deep since i can pick any other
name and it goes ok.

Cheers.

Hi, I'm a bit confused with this.
If you follow the steps below in Rails 3:

1- rails new act -d mysql
2- rails g scaffold action name:string
3- rake db:create
4- rake db:migrate
5- rails server

when I add a record to that app I get:

INSERT INTO `actions` (`created_at`, `name`, `updated_at`) VALUES
('2010-11-17 15:23:53', NULL, '2010-11-17 15:23:53')

Note that NULL for the name value. I use as valid string but there is
goes as NULL.

Do another scaffold named act and everything goes fine with no changes.
I could imagine that action is a reserved word but shouldn't it complain
about it?

According to the very useful page
http://wiki.rubyonrails.org/rails/pages/ReservedWords:

action – overwritten by Rails when used with form parameters (i.e. an
ActionsController expecting action[field_name] won't work)

I fell over this one myself a little time ago. I ended up with Act model also.

Colin

Yeah, reserved. First link in google sorry for that.
I would have expected to see some complains from the framework though.

Thanks!

Colin Law wrote in post #962187:

INSERT INTO `actions` (`created_at`, `name`, `updated_at`) VALUES
('2010-11-17 15:23:53', NULL, '2010-11-17 15:23:53')

Note that NULL for the name value. I use as valid string but there is
goes as NULL.

Do another scaffold named act and everything goes fine with no changes.
I could imagine that action is a reserved word but shouldn't it complain
about it?

According to the very useful page
http://wiki.rubyonrails.org/rails/pages/ReservedWords:

action overwritten by Rails when used with form parameters (i.e. an
ActionsController expecting action[field_name] won't work)

Yes, I realized this just after posting. I couldn't see why `action` as
a field or Action as an object name would be reserved, but I didn't take
into consideration that Rails uses a parameter in the request with the
same name as the object class. If that class is Action, then yes, bad
things happen.

I fell over this one myself a little time ago. I ended up with Act
model also.

Colin

Best,