我的表单不会将params存储在模型中

时间:2013-11-02 09:09:48

标签: javascript jquery ruby-on-rails ajax

我有一个rails项目,我必须在数据库中保存订阅者数据而不刷新页面!

所以我编写了一个Ajax按钮。当我单击按钮时会弹出一个警告并返回刚刚创建的新用户的ID。问题是当我查看rails控制台获取模型的最后记录时 User.last 记录的所有字段都是nil(ID除外)。我该如何解决这个问题?


路线:

users_new GET  /users/new(.:format)    users#new
    users GET  /users/index(.:format)  users#index
   create POST /users/create(.:format) users#create

这是我在app / views / users / new.html.haml

中的观点
.form1
  %h1 
    Subscriber
  =form_for @user do |form|
    - unless @user.errors.empty?
      - @user.errors.full_messages.each do |message|
        .alert.alert-danger
          %ul
            - @user.errors.full_messages.each do |message|
              %li= message
    %div{ :data => { :role => :content} }
      .row.form-group
        .col-lg-3
          %label 
            Email:
          =form.text_field :email, :class => 'form-control'
      .row.form-group
        .col-lg-3
          %label 
            Name:
          =form.text_field :name, :class => 'form-control'
      .row.form-group
        .col-lg-3
          %label 
            Phone Number:
          =form.text_field :phone_number, :class => 'form-control'
      .row.form-group
        .col-lg-3
          %label    
            Address:
          =form.text_field :address, :class => 'form-control'
      %ui-grid-a
        %ui-block-a
          %a.primary{ :data => { :role => :button, :remote => create_path, :parent => '.form1', :success => 'saved' } } Save

这是控制器:

class UsersController < ApplicationController

  def index
  end

  def new
    @user = User.new
  end

  def create
    @user = User.new params[:user]
    @user.save
    render :json => @user  
  end

end

我的js文件:

function saved(user){
  alert(user.id);
}

1 个答案:

答案 0 :(得分:0)

有很多事情可能导致这个问题

考虑到你是一个铁杆新手( welcome!),我认为最好在答案中概述问题,而不是在评论中


<强>的routes.rb

在名为resources的rails路由中有一个函数 - 这允许您通过单个函数调用创建许多rails路由 - resources :controller

您似乎是在手动声明路由,这通常被认为是newcreate等通用函数的不良做法我建议您先将routes.rb文件更改为:< / p>

#app/config/routes.rb
resources :users 

这将为您提供一组预先生成的路线,这将使您的代码保持高效


<强> Users_Controller.rb

 #/app/controllers/users_controller.rb
 def create
    @user = User.new params[:user]
    @user.save
    render :json => @user  
  end

你这里有一个大问题

您正在使用AJAX(这是Javascript),并且没有正确处理请求。您确实需要使用respond_to来处理请求的标头类型,并确保您能够正确使用该应用

试试这个:

 #/app/controllers/users_controller.rb
 def create
    @user = User.new params[:user]
    @user.save

    respond_to do |format|
        format.js 
        format.json {  render :json => @user   }
        format.html
    end 
 end

你需要确保的是你知道JSON和A之间的区别吗?通过Ajax调用标准的“Javascript”。 JSON基本上是一种处理小数组(称为JSON对象)的方法,可以通过ajax传递;完整的JavaScript调用具有更多的范围


<强> Create.js.erb

.js.erb.html.erb

基本相同

create.js.erb中,您依靠json对象返回新用户的ID。虽然这可能被认为是O.K,但我认为你可以通过完全删除json对象来提高效率

create.js.erb中,您不需要任何功能来解雇事物。它只是像HTML视图一样工作,所以你应该把代码放在你想要解雇的地方:

#/app/views/users/create.js.erb  
alert(<%=j @user.id %>);

虽然这里的方法是正确的,但我不知道它是否会输出任何内容,因为我们没有明确传递@user变量