Json之后的Rails名称错误

时间:2016-05-15 23:58:55

标签: ruby-on-rails json reactjs react-rails

我的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)

任何想法?

2 个答案:

答案 0 :(得分: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错误。

答案 1 :(得分: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渲染这篇文章来查看文件。但这对我来说没什么了