0

我正在编写 ruby​​ on rails 代码。我正在使用 ajax 请求将数据从客户端发送到服务器。但问题是它不会将该数据保存到数据库中。由于我对 ruby​​ on rails 完全陌生,所以我不知道为什么它不起作用。我也没有收到任何错误

这是我的代码

class ContactsController < ApplicationController
def contacts
name = params["name"]
company = params["company"]
email = params["email"]
phone = params["phone"]

@contacts = Contact.new(params[:post])

if @contacts.save
  redirect_to root_path, :notice => "your post is saved"
else
  render "new"
end
end
end

这是我的js代码

$('.signupbutton').click(function(e) {
        e.preventDefault();
        var data = $('#updatesBig').serialize();
        var url = 'contacts';
        console.log(data);
        $.ajax({
            type: 'POST',
            url: url,
            data: data,
            success: function(data) {
                console.log('done');
            }
        });
    });

这是我在控制台中的输出

Started POST "/contacts" for 127.0.0.1 at 2012-07-13 13:25:41 +0300
Processing by ContactsController#contacts as */*
  Parameters: {"name"=>"asdsa", "company"=>"asdsa", "email"=>"asdasd", "phone"=>"asdasd"}
   (0.1ms)  begin transaction
  SQL (18.1ms)  INSERT INTO "contacts" ("company", "created_at", "email", "group", "name",  "phone", "updated_at") VALUES (?, ?, ?, ?, ?, ?, ?)  [["company", nil], ["created_at", Fri, 13 Jul 2012 10:25:41 UTC +00:00], ["email", nil], ["group", nil], ["name", nil], ["phone",  nil], ["updated_at", Fri, 13 Jul 2012 10:25:41 UTC +00:00]]
   (3.9ms)  commit transaction
Redirected to http://0.0.0.0:3000/
Completed 302 Found in 33ms (ActiveRecord: 22.5ms)

更新

这是我的html表单。我正在使用 haml 而不是计划 html.erb

%form#updatesBig{:target => 'contacts', :method => 'post'}
    %div
      %label{:for => 'form_updatesBig_name'} Name
      %input{:type => "text", :id => 'form_updatesBig_name', :name => 'name', :class => 'text name required'}
      %label{:for => 'form_updatesBig_company'} Organization
      %input{:type => "text", :id => 'form_updatesBig_company', :name => 'company', :class => 'text company required'}
    %div
      %label{:for => 'form_updatesBig_email'} E-mail
      %input{:type => "text", :id => 'form_updatesBig_email', :name => 'email', :class => 'text email required'}
      %label{:for => 'form_updatesBig_phone'} Phone
      %input{:type => "text", :id => 'form_updatesBig_phone', :name => 'phone', :class => 'text phone required'}
    %div
      %input.button.signupbutton{:type => 'submit', :value => 'Sign up'}
4

1 回答 1

2

看起来您的 HTML 输入名称和您的控制器没有一起工作。通常在 Rails 中,当您使用内置的表单助手时,所有字段名称都使用您的模型命名:

<input name="contact[name]">

这就是允许您Contact.new(params[:contact])在控制器中执行类似操作的原因。在您的情况下,由于您没有发布表单,因此我无法判断表单发生了什么,但我假设基于您如何访问控制器中的 params 变量,这就是问题所在。我建议使用表单助手,以便您的 HTML 遵循命名空间参数的预期约定。然后,您将能够将控制器更改为:

@contacts = Contact.new(params[:contact])

if @contacts.save
  redirect_to root_path, :notice => "your post is saved"
else
  render "new"
end

需要注意的一件事是,盲目地使用参数实例化对象可能会导致安全漏洞。请务必阅读有关批量分配的安全指南部分以更好地理解这一点。

于 2012-07-13T10:49:04.570 回答