-1

我的 Rails 项目中有两个 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')) }) %>

我得到这个错误。

餐厅名称错误#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)

这告诉 Rails 您正在尝试呈现 JSON 格式的输出。使用文件名来传达意图是行不通的。请改用该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

这是我的意见/帖子/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 回答