Ruby on rails Rails-两个相关资源的嵌套显示
我有一个包含许多帖子的事件模型,我试图以大纲格式显示事件和帖子的相关内容,如下所示:Ruby on rails Rails-两个相关资源的嵌套显示,ruby-on-rails,methods,instance,Ruby On Rails,Methods,Instance,我有一个包含许多帖子的事件模型,我试图以大纲格式显示事件和帖子的相关内容,如下所示: Event 1 Post 1 Post 2 Event 2 Post 3 Post 4 ... 我目前有以下内容,由于某种原因,控制器在我的事件模型中找不到“postlist”方法(作用于@eventlist实例) class Event < ActiveRecord::Base belongs_to :group has_many :posts def postlist
Event 1
Post 1
Post 2
Event 2
Post 3
Post 4
...
我目前有以下内容,由于某种原因,控制器在我的事件模型中找不到“postlist”方法(作用于@eventlist实例)
class Event < ActiveRecord::Base
belongs_to :group
has_many :posts
def postlist
Post.from_event_posts(self)
end
end
class Post < ActiveRecord::Base
belongs_to :event
belongs_to :user
def self.from_event_posts(event)
where(event_id: event.id)
end
end
class GroupsController < ApplicationController
def show
@eventlist = @group.eventlist #returns hash of events for a group - confirmed working
#Get list of posts for each event
@postlist = @eventlist.postlist
end
end
<%= @eventlist.each do |e| %>
<ul>
<li><%= e.title %></li>
<%= e.postlist.each do |p| %>
<ul>
<li><%= p.comment %> | <%=p.user_id%> </li>
</ul>
<%end%>
</ul>
<%end%>
class事件
- |
我得到了以下错误:未定义的#方法“postlist”得到了这个错误,因为您不是在一个事件上调用方法postlist,而是在一个事件数组上调用方法postlist。顺便说一句,Rails中的一般惯例是调用这些变量
@events
和@posts
(只是一个提示,以后习惯会很方便)
你能给我们看看你的集体课吗
我会这样写:
def show
@events = @group.events.includes(:posts)
end
includes方法将posts表连接到正在执行的SQL查询,在呈现视图之前加载posts。您的视图如下所示:
<%= @events.each do |e| %>
<ul>
<li><%= e.title %></li>
<%= e.posts.each do |p| %>
<ul>
<li><%= p.comment %> | <%=p.user_id%> </li>
</ul>
<%end%>
</ul>
<%end%>
- |
我相信您可以删除postlist和eventlist方法。这些功能已经存在。谢谢,这非常有效。虽然我刚刚开始Rails的开发,但我注意到使用@events/@posts是一种约定,但是如果将每个全局变量都命名为同一个东西,会不会让人感到困惑呢?也许在一开始,但以后会变得很自然,相信我:)
@post
、@posts
和post
的含义完全不同。事实上,我觉得它相当不错!