我在“贡献”控制器中创建了一个新动作,如此
def newitem
@Item = Item.new(:description => params[:description], :type_id => params[:type])
if @Item.save
#Magic supposed to happen here
end
end
所以在这个动作中我创建了一个新的“Item”,我想要实现的是从AJAX响应中获取创建项目的id,所以我可以在同一个视图中使用它来创建“item”。 ..
第1个问题,如何从控制器发回创建项目的参数? 第二,我知道如何处理Ajax请求,但如何处理第一个请求的Ajax响应......
也许我在思考解决方案,但却无法弄清楚如何去做。 提前谢谢。
答案 0 :(得分:1)
有几种方法可以解决这个问题。下面解释的方法适用于Rails 3.1
直接在您的方法中调用渲染(此方法仅适用于JSON API方法。由于html渲染将不存在):
def newItem
@Item = Item.create(:description => params[:description], :type_id => params[:type])
render json: @Item
end
使用respond_do块:
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
向您的控制器传达您想要的响应格式:
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
皮肤猫的方法总是不止一种。我希望这有帮助