-1

私のレールプロジェクトには2つのJSONファイルがあります

index.json.jbuilder

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

および_restaurant.json.jbuilder

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

index.html.erb でコンポーネントをレンダリングするとき

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

このエラーが発生します。

Nameレストランのエラー#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)

何か案が ?

4

2 に答える 2

1

レンダリング呼び出しでは、これを行っています:

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

そして、あなたはこれをしているはずです:

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

これは、JSON 形式の出力をレンダリングしようとしていることを Rails に伝えます。ファイル名を使用して意図を伝えることはできません。代わりに、format:オプションを使用してください。

_restaurant.json.jbuilderファイルで、コードを次のように変更します

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

それはそのundefined local variable or methodエラーを処理するはずです。

于 2016-05-16T00:39:53.457 に答える
0

はい、何かが起こりましたが、とにかくjsonでデータを取得できません。私はすでに新しいコントローラーですべてを変更しているので、私がしたこと:

これが私のポストコントローラーです

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

ここに私のviews/posts/index.html.erbファイルがあります

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

ここに views/posts/index.json.jbuilder ファイルがあります

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

ここに views/posts/show.json.jbuilder ファイルがあります

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

ここに私の反応コンポーネントファイル 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>
      );
  }

});

rails-admin で投稿を追加できます。すべてが機能しています。この投稿を json でレンダリングしてファイルを表示したいだけです。しかし、これは私に何も示していません

于 2016-05-16T01:08:35.923 に答える