从ajax响应Rails获取Params

时间:2012-01-14 03:16:59

标签: ruby-on-rails ajax ruby-on-rails-3 jquery

我在“贡献”控制器中创建了一个新动作,如此

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响应......

也许我在思考解决方案,但却无法弄清楚如何去做。 提前谢谢。

1 个答案:

答案 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

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