Как преобразовать эти опции response_to в версию Rails 3? - PullRequest
1 голос
/ 20 ноября 2011
respond_to do |format|
  if @user.save
    format.js { render :nothing => true, :status => :ok, :location => @user }
  else
    format.js { render :json => @user.errors, :status => :unprocessable_entity }
  end
end

Все варианты, которые я пробовал (например, размещение respond_to :js в верхней части контроллера и т. Д.), Работают не совсем так, как в этом.

Ответы [ 3 ]

4 голосов
/ 20 ноября 2011

Rails 3 Формат:

Использование response_to : json и response_with (@ user)

  respond_to :json  # You can also add  , :html, :xml  etc.

  def create
    @user= User.new(params[:user])
      #---For html flash
      #if @user.save
      #  flash[:notice] = "Successfully created user."
      #end
    respond_with(@user)
  end

# Also, add :remote => :true, :format => :json to the form.
2 голосов
/ 20 ноября 2011

Попробуйте использовать format.json вместо format.js в вашем контроллере и :remote => :true, :format => :json в соответствующей форме.

Хотя я не совсем уверен, следует ли использовать format.json или format.js втот случай.По умолчанию строительные леса из Rails 3 генерируют контроллеры с format.json, а в ответ вы делаете render :json. Я считаю, что format.json - правильный путь.И format.js следует использовать, когда вы возвращаете часть JS, которая должна быть выполнена.

1 голос
/ 20 ноября 2011

URL, который вы запрашиваете, должен заканчиваться на .json, например: /controller/action.json

Если это невозможно:

Вы должны установить для параметра 'accepts' значение 'application/json' при отправке запроса ajax.

Найдите, как использовать 'accepts' здесь: http://api.jquery.com/jQuery.ajax/

А на стороне сервера:

format.json { render :json => @user.errors, :status => :unprocessable_entity }
...