在新客户记录的创建操作上提交的空记录

时间:2012-08-20 09:32:02

标签: ruby-on-rails ruby null posts

我是铁轨上的一个完整的菜鸟,但一直在自学,我似乎能够自己解决这个简单的问题。但是我现在有一个问题似乎无法解决。当我在填写表单上的所有字段后调用我的“新”或“创建”操作来创建新记录时,我会将空白记录提交到数据库。所有字段都为'null'。

INSERT INTO `clients` (`accountholder`, `allergies`, `birthdate`, `cell`, `created_at`, `data1`, `data2`, `data3`, `data4`, `emailaddress`, `fax`, `middlename`, `name`, `surname`, `tel`, `text`, `updated_at`) VALUES (NULL, NULL, NULL, NULL, '2012-08-20 09:10:46', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '2012-08-20 09:10:46') 

我可以在@post = Client.update_attributes(params [:id])的控制台上的日志转储期间看到数据是正确的。

clients_controller.rb

def new
  @post = Client.create
end

def create
  @post = Client.new(params[:posts])

   if @post.save
    redirect_to clients_path
   else
    render "new"
   end
end

index.html.erb

<%= form_for @post do |x| %>
    <p>
        <%= x.label :name %><br />
        <%= x.text_field :name, :cols => "30", :rows => "1" %>
    </p>

    <p>
        <%= x.label :surname %>
        <%= x.text_area :surname, :cols => "30", :rows => "1" %>
    </p>

    <p>
        <%= x.label :middlename %>
        <%= x.text_area :middlename, :cols => "30", :rows => "1" %>
    </p>

    <p>
        <%= x.label :tel %>
        <%= x.text_area :tel, :cols => "30", :rows => "1" %>
    </p>

    <p>
        <%= x.label :cell %>
        <%= x.text_area :cell, :cols => "30", :rows => "1" %>
    </p>

    <p>
        <%= x.label :allergies %>
        <%= x.text_area :allergies, :cols => "30", :rows => "10" %>
    </p>

    <p>
        <%= x.label :fax %>
        <%= x.text_area :fax, :cols => "30", :rows => "1" %>
    </p>

    <p>
        <%= x.label :birthdate %>
        <%= x.text_area :birthdate, :cols => "30", :rows => "1" %>
    </p>


    <p>
        <%= x.submit "Add a New Client" %>
    </p>
<% end %>

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:1)

@post = Client.new(params[:posts])

应该是:

@post = Client.new(params[:client])

params[:posts]未定义,因此为零。这就像调用Client.new(),意味着默认情况下属性为NULL。

类名是Client,您尝试创建的客户端是单数,因此客户端。在Rails中,通常客户端集合称为客户端,客户端称为客户端。

这就是为什么默认情况下,您会看到index操作使用@clients(因为它是复数形式),而show操作使用@client