我想做什么?
我不想在我的rails上显示使用我的rails模型中的react.js组件查看文件数据。
我拥有什么?
我已经安装了这些宝石
rails-admin
react-rails
我做了什么?
我创建了一个新的rails项目。 我安装了react-rails gem和rails-admin gem 创建了具有以下类型的新控制器
rails g scaffold帖子标题:字符串正文:文字
我可以从rails admin帖子中添加所有内容。
我的控制器看起来像:
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>
);
}
});
所以我无法理解我哪里错了。我无法从json获取数据到index.html.erb。我怎样才能做到这一点?请帮助我卡住,我在互联网上找不到任何可以理解的东西
答案 0 :(得分:0)
我做了三处修改让它发挥作用:
index.html.erb
<%= react_component('PostList',
render(template: 'posts/index', formats: :json)
)
%>
views / posts / index.json.jbuilder文件
json.posts(@posts) do |post|
json.extract! post, :id, :title, :body
json.url post_url(post, format: :json)
end
按照documentation中的说明;即。 “确保你的JSON是一个字符串化的哈希,而不是一个数组”。
删除PostList组件渲染功能中的JSON.parse函数,对此:
var PostList = React.createClass({
render: function() {
return (
<div>
{this.props.posts.map(function(post) {
return <Post key={post.id} {... post} />;
})}
</div>
);
}
});
答案 1 :(得分:0)
这种方法很有效。
<强> index.html.erb 强>
<% @news.order("id DESC").each do |news| %>
<%= react_component('News', { :news => news }) %>
<% end %>
<强> news.js.jsx 强>
var News = React.createClass({
displayName: 'News',
render: function() {
return (
<div>
<h4>{this.props.news.title}</h4>
<p>{this.props.news.body}</p>
</div>
);
}
});
<强> index.json.jbuilder 强>
json.array!(@news) do |news|
json.extract! news, :id, :title, :body
json.url news_url(news, format: :json)
end