gpt4 book ai didi

ruby-on-rails - 从ajax响应中获取参数Rails

转载 作者:行者123 更新时间:2023-12-01 05:02:22 24 4
gpt4 key购买 nike

我在“贡献” Controller 中创建了一个新操作,如下所示

def newitem
@Item = Item.new(:description => params[:description], :type_id => params[:type])
if @Item.save
#Magic supposed to happen here
end
end

因此,在此操作中,我创建了一个新的“项目”,我想要实现的是从 AJAX 响应中创建的项目获取 id,这样我就可以在创建“项目”的同一 View 中使用它。 ..

第一个问题,如何从 Controller 发回创建项目的参数?第二我知道如何处理 Ajax 请求,但如何处理对第一个请求的 Ajax 响应...

也许我过度思考了解决方案,但就是不知道如何去做。提前致谢。

最佳答案

有几种方法可以解决这个问题。下面解释的方法适用于 Rails 3.1

直接在您的方法中调用渲染(此方法对于仅 JSON API 的方法很有帮助。因为 html 渲染将不存在):

def newItem
@Item = Item.create(:description => params[:description], :type_id => params[:type])
render json: @Item
end

使用respond_do block :

def newItem
@Item = Item.create(:description => params[:description], :type_id => params[:type])

respond_to do |format|
if @Item.save
format.html { redirect_to @Item, notice: 'Item was successfully created.' }
format.json { render json: @Item, status: :created, location: @Item
else
format.html { render action: "new" }
format.json { render json: @Item.errors, status: :unprocessable_entity }
end
end
end

教你的 Controller 你想要的响应格式:

class ContributionsController < ApplicationController
# Set response format json
respond_to :json

...

def newItem
@Item = Item.create(:description => params[:description], :type_id => params[:type])
respond_with @Item #=> /views/contributions/new_item.json.erb
end

可能的“陷阱”...

如果您在创建项目时验证失败,您将无法取回 ID,也不会报告失败(http 响应代码除外)

将以下内容添加到您的模型中。它将在 json 响应中的错误哈希中包含验证失败

 class Item < ActiveRecord::Base

...

# includes any validation errors in serializable responses
def serializable_hash( options = {} )
options = { :methods => [:errors] }.merge( options ||= {} )
super options
end

剥猫皮的方法总是不止一种。我希望这有帮助

关于ruby-on-rails - 从ajax响应中获取参数Rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8859879/

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