0

我的 Active Record 关联有问题,想知道是否有人可以为我指明正确的方向。我会尽力解释我的问题,但我什至不知道给它起什么名字。

我的数据库中有三个相互关联的表,我需要从一个视图文件中的三个表中的每一个中调用信息。

一个主题中可以有多个帖子,每个帖子(和主题)都有一个用户附加到它。我需要能够使用 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 %>
4

1 回答 1

2

你做对了,除了你应该调用post.user,而不是post.users.

在您的Post模型中,您有一条线belongs_to :user。这意味着Post模型只有一个User对象。意思是,您通过关联名称的单数形式访问依赖对象,在本例中为.user. 如果您在这种关系中使用复数形式,您会得到一个无用的(在这种情况下)集合代理,正如您所看到的,它的行为与您的对象不同。

如果你有类似的东西has_many :users,那么你确实会使用复数形式.users,你会得到一个对象集合User,就像Topics.posts给你一个集合Post对象一样。

还:

在这一行:link_to 'Edit', edit_post_path(@post),放弃@符号,它应该是link_to 'Edit', edit_post_path(post)。请记住,此符号指的是一个实例变量,它与同名的局部范围变量(换句话说,@post!= post)完全不同。

希望有帮助。

于 2013-10-15T22:10:00.780 回答