我的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)
任何想法?
答案 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渲染这篇文章来查看文件。但这对我来说没什么了