2016-05-15 21 views
-1

ich zwei JSON-Datei in meine SchienenRails Name Fehler nach Json

index.json.jbuilder

json.array! @restaurants, partial: 'restaurants/restaurant', as: :restaurant 

und Projekt _restaurant.json.jbuilder

json.(restraurant, :id, :name, :address, :description) 

Wenn ich meine Komponente auf meinem index.html.erb

rendere
<%= react_component('RestaurantList', {name: raw(render(template: 'restaurants/index.json.jbuilder')) }) %> 

Ich bekomme diesen Fehler.

Nameerror in Restaurants # Index

undefined local variable or method `restraurant' for #<#<Class:0x007ffd1f6a61b0>:0x007ffd22e2bea0> 
Did you mean? restaurant 
       restaurant_url 
       restaurant_path 
       restaurants_url 
       restaurants_path 
       @restaurants 

Extracted source (around line #1): 
1 

json.(restraurant, :id, :name, :address, :description) 

irgendeine Idee?

Antwort

1

In Ihrem Anruf machen, tun Sie dies:

render(template: 'restaurants/index.json.jbuilder') 

und Sie sollten dies tun:

render(template: 'restaurants/index', formats: :json) 

Dies sagt Rails, die Sie versuchen, eine JSON formatierte Ausgabe zu machen . Die Verwendung des Dateinamens zur Kommunikation der Absicht funktioniert nicht. Verwenden Sie stattdessen die Option format:.

Und in Ihrer _restaurant.json.jbuilder Datei, um den Code zu diesem ändern:

json.(restaurant, :id, :name, :address, :description) 

, die Pflege dieser undefined local variable or method Fehler nehmen.

+0

ich habe es versucht.Ich füge Antwort zu Oberseite hinzu –

+0

Ich aktualisierte meine Antwort für Sie. Schau, ob das funktioniert. –

+0

Kannst du meine letzte Antwort sehen? Ich ändere dort etwas –

0

ja ich tat und etwas passiert, aber ich kann sowieso nicht Daten mit Json bekommen. Ich alle schon mit neuen Controller ändern, so, was ich tat:

Hier mein Beitrag Controller

class PostsController < ApplicationController 
    before_action :set_post, only: [:show, :edit, :update, :destroy] 

    # GET /posts 
    # GET /posts.json 
    def index 
    @posts = Post.all 
    end 

    # GET /posts/1 
    # GET /posts/1.json 
    def show 
    @post = Post.find(params[:id]) 
    end 

    # GET /posts/new 
    def new 
    @post = Post.new 
    end 

und hier ist meine Ansichten/posts/index.html.erb Datei

<%= react_component('PostList', {name: raw(render(template: 'posts/index', formats: :json)) }) %> 

hier Datei ist views/posts/index.json.jbuilder

json.array!(@posts) do |post| 
    json.extract! post, :id, :title, :body 
    json.url post_url(post, format: :json) 
end 

hier ist views/posts/show.json.jbuilder Datei

json.extract! @post, :id, :title, :body, :created_at, :updated_at 

hier ist meine reagieren Komponentendatei assets/Javascripts/components/post_list.js.jsx

var PostList = React.createClass({ 

    render: function() { 
    return (
     <div> 
     {JSON.parse(this.props.posts).map(function(post) { 
      return <Post key={post.id} {... post} />; 
     })} 
     </div> 
    ); 
    } 

});

Ich kann Post mit Rails-admin hinzufügen alles funktioniert Ich möchte nur diese Beiträge mit Json rendern, um Dateien anzuzeigen. Aber das zeigt mir nichts

+0

Sie sollten Ihrer Frage keine weiteren Informationen hinzufügen, indem Sie eine Antwort posten. Sie können die Schaltfläche "Bearbeiten" unterhalb der Frage verwenden, um weitere Informationen hinzuzufügen. Bitte verschieben Sie diese Information zu der Frage und löschen Sie diese Antwort. –

+0

Eigentlich ist das eine neue Frage. Sie sollten eine neue Frage mit diesen Informationen erstellen. Es ist wichtig, dass StackOverflow eine Frage stellt und diese beantwortet. Neue Probleme müssen neue Fragen haben. –