这似乎是一个重复的问题,但其他帖子的答案似乎不适用于我在这里遇到的问题。
我需要在控制器的index方法内在此处呈现两个JSON项:
def index
@user = User.all
@libraries = Library.all.order(:created_at)
user_cards = current_user.libraries
render :json => @libraries, :include => :user
render :json => user_cards
end
我尝试过这种方式(失败,出现500错误):
render :json => @libraries, user_cards, :include => :user
我也尝试过这种方式(也失败了,并显示500错误):render :json => @libraries :include => [:user, :user_cards]
更新
这是正确渲染json的最新尝试:
def index
@user = User.all
@libraries = Library.all.order(:created_at)
user_cards = current_user.libraries
render json: {
user_cards: user_cards,
libraries: @libraries.as_json(include: [:user])
}
end
问题是,我现在在整个应用程序中都遇到libraries
上的错误。如果我只是像原始使用(render :json => @libraries, :include => :user
一样呈现json,就不会出现此错误。因此,我假设我的方式仍然不正确。在libraries
上的确切错误是在我使用过滤器的React组件之一中调用的:
错误:Uncaught TypeError: this.props.librarys.filter is not a function
错误位置:
let filteredCards = this.props.librarys.filter(
(library) => {
return library.title.toLowerCase().indexOf(this.state.search.toLowerCase()) !== -1 || library.desc.toLowerCase().indexOf(this.state.search.toLowerCase()) !== -1
}
)
答案 0 :(得分:1)
控制器只能返回一个响应,您可以通过将这两个返回值合并为一个来实现:
respond_to do |format|
format.json { render json: { user_cards: user_cards,
libraries: @libraries } }
end