gpt4 book ai didi

javascript - 我的表单未将参数存储在模型中

转载 作者:行者123 更新时间:2023-11-28 08:46:23 25 4
gpt4 key购买 nike

我有一个 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 中的 View

.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

这是 Controller :

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

铁路 route 有一个名为 resources 的函数- 这允许您通过单个函数调用创建多个 Rails 路线 - resources :controller

您似乎正在手动声明您的路线,这通常被认为对于像 newcreate 这样的通用函数来说是不好的做法,我建议您首先更改您的路线。 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处理请求的 header 类型,并确保您能够正确地与应用交互

试试这个:

 #/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 View 一样工作,因此您应该将代码放入您想要触发的代码中:

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

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

关于javascript - 我的表单未将参数存储在模型中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19740455/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com