title: SystemStackError (stack level too deep)
body: <p>I'm developing an android app, and I need to have a json response of the show view about a saved object. Trying that, I receive:</p>
  
  <pre><code>"SystemStackError (stack level too deep)"
  app/controllers/segnalaziones_controller.rb:74:in `create'
  app/controllers/segnalaziones_controller.rb:58:in `create'
  </code></pre>
  
  <p>Here is the "Segnalazione" controller </p>
  
  <pre><code>include Gft
  
  class SegnalazionesController &lt; ApplicationController
  
    load_and_authorize_resource  
    respond_to :json
    # GET /segnalaziones
    # GET /segnalaziones.xml
    # before_filter :authorize
  
    def index
      @segnalaziones = Segnalazione.order(:dataspedizione)
      respond_to do |format|
        format.html # index.html.erb
        format.xml  { render :xml =&gt; @segnalaziones }
        format.json  { render :json =&gt; @segnalaziones }
      end
    end
  
    # GET /segnalaziones/1
    # GET /segnalaziones/1.xml
    def show
      @segnalazione = Segnalazione.find(params[:id])
       respond_to do |format|
         format.html # show.html.erb
         format.xml  { render :xml =&gt; @segnalazione }
         format.json  { render :json =&gt; @segnalazione }
      end
    end
  
    # GET /segnalaziones/new
    # GET /segnalaziones/new.xml
    def new
      @segnalazione = Segnalazione.new
      respond_to do |format|
        format.html # new.html.erb
        format.xml  { render :xml =&gt; @segnalazione }
        format.json  { render :json =&gt; @segnalazione }
      end
    end
  
    # GET /segnalaziones/1/edit
    def edit
      @segnalazione = Segnalazione.find(params[:id])
  
    end
  
    # POST /segnalaziones
    # POST /segnalaziones.xml
    def create
      @segnalazione = Segnalazione.new(params[:segnalazione])
  @user = User.find_by_id(session[:user_id])
  @username = session[:user_name]
  @segnalazione.user = session[:user_id]
      @segnalazione.dataspedizione = Time.zone.now
      @user.last_request_at = Time.zone.now
      @user.save
      respond_to do |format|
        if @segnalazione.save
           Gft.spedisci(
              @segnalazione.id,
              @username,
              @segnalazione.mood,
              @segnalazione.dove,
              @segnalazione.via,
              @segnalazione.dataspedizione,
              @segnalazione.descrizione,
              @segnalazione.immagine.url,
              @segnalazione.categoria1,
              @segnalazione.categoria2,
              @segnalazione.categoria3)
            format.html { redirect_to(@segnalazione, :notice =&gt; 'Segnalazione creata, verrà visualizzata su mappa fra qualche attimo') }
            format.xml  { render :xml =&gt; @segnalazione, :status =&gt; :created, :location =&gt; @segnalazione }
            format.json  { render :json =&gt; @segnalazione, :status =&gt; :created, :location =&gt; @segnalazione }
  
          else
            format.html { render :action =&gt; "new" }
            format.xml  { render :xml =&gt; @segnalazione.errors, :status =&gt; :unprocessable_entity }
            format.json  { render :json =&gt; @segnalazione.errors, :status =&gt; :unprocessable_entity }
          end
        end
      end
  
      # PUT /segnalaziones/1
      # PUT /segnalaziones/1.xml
      def update
        @username = session[:user_name]
        @segnalazione = Segnalazione.find(params[:id])
        respond_to do |format|
          if @segnalazione.update_attributes(params[:segnalazione])
            Gft.aggiorna(
            @segnalazione.id,
            @username,
            @segnalazione.mood,
            @segnalazione.dove,
            @segnalazione.via,
            @segnalazione.dataspedizione,
            @segnalazione.datarisoluzione,
            @segnalazione.descrizione,
            @segnalazione.immagine.url,
            @segnalazione.categoria1,
            @segnalazione.categoria2,
            @segnalazione.categoria3)
          format.html { redirect_to(@segnalazione, :notice =&gt; 'Segnalazione aggiornata') }
          format.xml  { head :ok }
        else
          format.html { render :action =&gt; "edit" }
          format.xml  { render :xml =&gt; @segnalazione.errors, :status =&gt; :unprocessable_entity }
        end
      end
    end
  
    # DELETE /segnalaziones/1
    # DELETE /segnalaziones/1.xml
    def destroy
      @segnalazione = Segnalazione.find(params[:id])
      @segnalazione.destroy
      Gft.elimina(@segnalazione.id)
      respond_to do |format|
        format.html { redirect_to(admin_url) }
        format.xml  { head :ok }
      end
    end
  
    def eliminadatarisoluzione
      @segnalazione.datarisoluzione = nil
    end
  end
  </code></pre>
  
  <p>If I "localhost:3000/segnalaziones/2?format=xml", the xml is showed.</p>
  
  <p>If I "localhost:3000/segnalaziones/2?format=json" I receive again the error page (stack level too deep ... )</p>
  
  <p>I've tried this solutions, that doesn't work:</p>
  
  <p><a href="http://dalibornasevic.com/posts/5-ruby-stack-level-too-deep-systemstackerror" rel="nofollow">http://dalibornasevic.com/posts/5-ruby-stack-level-too-deep-systemstackerror</a></p>
  
  <p><strong>SOLUTION:</strong> </p>
  
  <p>Instead of:</p>
  
  <pre><code> format.json  { render :json =&gt; @segnalazione, :status =&gt; :created, :location =&gt; @segnalazione }
  </code></pre>
  
  <p>I've used</p>
  
  <pre><code> format.json  { render :json =&gt; @segnalazione.as_json(:only =&gt; [:user, :categoria1, :categoria2, :categoria3, :descrizione, :dove, :via]), :status =&gt; :created, :location =&gt; @segnalazione }
  </code></pre>
  
  <p>Help found here: <a href="http://jonathanjulian.com/2010/04/rails-to_json-or-as_json/" rel="nofollow">http://jonathanjulian.com/2010/04/rails-to_json-or-as_json/</a></p>