我的表单没有将参数存储在模型中
My form does not store the params in model
我有一个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);
}
有很多事情可能会导致此问题
考虑到您是rails新手(欢迎!),我认为最好在答案中概述问题,而不是在评论中概述问题
路线.rb
轨道路线中有一个名为resources
的函数 - 这允许您通过单个函数调用创建多个轨道路线 - resources :controller
您似乎正在手动声明路由,这对于new
或create
等通用函数通常被认为是不好的做法,我建议您首先将routes.rb文件更改为:
#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和通过Ajax的标准"Javascript"调用之间的区别。 JSON
基本上是一种处理小数组(称为 JSON 对象)的方法,这些数组可以通过 ajax 传递;而完整的JavaScript调用具有更大的范围
Create.js.erb
.js.erb
与.html.erb
基本相同
在 create.js.erb
中,您依靠 json 对象来返回新用户的 ID。虽然这可能被认为是可以的,但我认为您可以通过完全删除 json 对象来提高效率
在create.js.erb
中,你不需要任何函数来触发东西。它就像一个HTML视图,所以你应该把你想要触发的代码放在你的名字中:
#/app/views/users/create.js.erb
alert(<%=j @user.id %>);
尽管这里的方法是正确的,但我不知道它是否会输出任何内容,因为我们没有显式传递@user
变量
- 如何在ExtJs4应用程序上为视图、存储和模型设置自定义文件夹名称
- 将嵌套的主干模型存储并恢复到本地存储中
- 如何加载一次模型并将其存储到变量中
- 主干本地存储模型和集合
- 主干:将集合存储在模型中
- 将数据存储在模型&集合呼叫&取来
- 如何将angular.js模型变量存储在javascript变量中
- 无法将存储的响应映射到模型 - EmberJS
- 我的表单没有将参数存储在模型中
- 将 Google App Engine 数据存储模型传递给 JavaScript 代码
- 无法使用 store.getById() 从存储中读取模型记录
- 集合中的主干模型数据未保存到本地存储
- 模型的存储未定义
- 煎茶触摸 2 模型关联保存不正确的数据进行存储
- 从 JSON.file 获取模型并将其存储在本地存储主干
- ExtJS4网格存储/模型显示空行
- 对于具有一对多关系的主干模型,存储“;许多“;数组中的模型,而不是Collection
- Mongodb&Espress:将对象存储在模型中
- 具有存储访问权限的模型的类方法
- 如何从模型存储EXTJs中读取额外属性