我的Active Record Associations存在问题,并且想知道是否有人可以指出我正确的方向。我会尽力解释我的问题,但我甚至不确定该怎么称呼它。
我的数据库中有三个表都是互连的,我需要在一个视图文件中调用三个表中的每个表的信息。
主题中可以有多个帖子,每个帖子(和主题)都附有一个用户。我需要能够使用Post和Topics调用User表中的数据。
问题:如何通过多个模型从表中获取数据。 (主题 - >帖子 - >用户)
模特
class Topic < ActiveRecord::Base
belongs_to :forum
has_many :posts, :dependent => :destroy
belongs_to :user
end
class Post < ActiveRecord::Base
belongs_to :topic
belongs_to :user
end
class User < ActiveRecord::Base
has_many :topics
has_many :posts, through: => :topics
end
在View / Topics / show.html中,我正在尝试向发布的用户显示。当我试图获取信息时,它给出了“名称”未定义方法的错误。我想要的是:
http://i44.tinypic.com/1z4kapj.png
示例:帖子1由UserName
创建查看/主题/ Show.html.erb
<% @topic.posts.each do |post| %>
<tr>
<td class="subforum" width="80%">
<%= post.created_at %>
<div class="go-right">
<%= link_to 'Edit', edit_post_path(@post) %>
</div>
</td>
</tr>
<tr>
<td class="row1">
<%= post.users.name %>
<%= post.user_id %>
</td>
</tr>
<tr>
<td class="row1">
<%= post.content %>
</td>
</tr>
<% end %>
答案 0 :(得分:2)
你正确地做了,除了你应该调用post.user
而不是post.users
。
在Post
模型中,您有一行belongs_to :user
。这意味着Post
模型只有一个User
对象。这意味着,您可以通过关联名称的单数形式访问依赖对象,在本例中只是.user
。如果你使用带有这种关系的复数形式,你会得到一个无用的(在这种情况下)收集代理,正如你所见,它与你的对象的行为不同。
如果您有类似has_many :users
的内容,那么您确实会使用复数.users
,并且您将获得User
个对象的集合,与{{1}相同为您提供了一个集合Topics.posts
对象。
同时强>
在这一行:Post
,抛弃link_to 'Edit', edit_post_path(@post)
符号,它应该是@
。请记住,此符号引用的是一个实例变量,它与同名的局部范围变量(换句话说@post!= post)完全不同。
希望有所帮助。