2012-01-14 3 views
2

Я создал новое действие в контроллере «взносы», как этотПолучить Params из Ajax Rails ответа

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

Так что в этом действии я создаю новый «товар» и то, что я хочу добиться того, чтобы получить id из созданного элемента в ответе AJAX, поэтому я могу использовать его в том же представлении, что создано «item» ...

1-й вопрос, как мне отправить обратно с контроллера параметры созданного элемента? 2-я Я знаю, как обращаться с запросами Ajax, но как мне обрабатывать ответ Ajax на первый запрос ...

Возможно, я уже думаю о решении, но просто не могу понять, как это сделать. Спасибо заранее.

ответ

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 

Возможные «Гоча» ...

Если у вас есть неудачи проверки по вопросу создания вы не получите идентификатор назад, и не будет сообщать о неисправности (кроме кода ответа 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 

Там всегда больше чем один способ кожи кошки. Надеюсь, это поможет

Смежные вопросы