尝试从关联表中输出User.fname

时间:2014-10-15 00:46:15

标签: ruby-on-rails ruby activerecord

所以,我是Rails的初学者,输出我需要的数据时遇到问题。

我有表用户,帖子和评论。 我应该能够在控制台中验证,请求Comment.find(32).user.fname并在我创建的博客上获取评论者的名字。

我已经想通了,并且能够编码以检索Comment.post.id并使用该信息。为什么我不能获得user.fname?

我在index.html.erb中的代码如下所示:

<ul>
<% @posts.each do |post| %>

    <li class="post"><%= post.body %>  |  <%= post.user_id %></li> 
    <li class="links"><%= link_to 'Show', post %>  |  
    <%= link_to 'Edit', edit_post_path(post) %>  |  
    <%= link_to 'Destroy', post, method: :delete, data: { confirm: 'Are you sure?' } %></li>

    <% post.comments.each do |comment| %>

      <% if comment.post.id == post.id %> <!-- I need below:Comment.find(32).user.fname -->
        <li class="comment"> <%= comment.body %> <%= comment.user.fname %> <br/> </li> 
      <% else %>

      <% end %>
    <% end %>   
<% end %>

上面的部分要求&lt;%if comment.post.id == post.id%&gt;作品。我很困惑为什么我不能要求comment.user.fname。

我的关联也已设置好,就像我说的那样,我可以在控制台中获取信息。

感谢任何帮助......谢谢!

根据要求:我的模特:

用户:

class User < ActiveRecord::Base
has_many :posts, foreign_key: "user_id" 

has_many :relationships, foreign_key: "follower_id", class_name: "Relationship", dependent: :destroy
has_many :followeds, through: :relationships
has_many :reverse_relationships, foreign_key: :followed_id, class_name: "Relationship", dependent: :destroy
has_many :followers, through: :reverse_relationships, source: :follower

validates_presence_of :fname, :lname, :username, :password

has_many :comments
end

发表:

class Post < ActiveRecord::Base
    belongs_to :user
    has_many :comments
end 

注释:

class Comment < ActiveRecord::Base

    belongs_to :user
    belongs_to :post

end

我有一张关系表:

class Relationship < ActiveRecord::Base

    belongs_to :follower, class_name: "User"
    belongs_to :followed, class_name: "User"
    validates_uniqueness_of :follower_id, scope: :followed_id

end

来自控制台的输出验证我应该能够获取数据:     [41] pry(主要)&gt; Comment.find(30).user.fname   注释加载(0.1ms)SELECT“comments”。* FROM“comments”WHERE“comments”。“id”=?限制1 [[“id”,30]]   用户负载(0.1ms)SELECT“users”。* FROM“users”WHERE“users”。“id”=?限制1 [[“id”,4]] =&GT; “C”

来自我的控制器:

  def index
    @posts = Post.all
  end

实际上我只引入@posts,我是否还应该引入@users或@comments或params?我不认为我应该这样做。我想我过去也尝试过这个。

添加错误讯息:

未定义的方法`fname'代表nil:NilClass

添加我的路线以防万一可能是问题,但我不知道如何:

  resources :posts do
    resources :comments
  end

  resources :users do 
    member do
      post 'follow'
      post 'unfollow'
    end
  end

1 个答案:

答案 0 :(得分:0)

不,您不必单独从db中获取@users或@comments。当您尝试访问其参数时,Rails将查询它们。

def index
  @posts = Post.all
end

就够了。

您可以获得评论它的用户的用户名,就像

一样
<%= comment.user.fname %>

或发布帖子的人的姓名:

<%= post.user.fname %>

如果它没有为您提供用户名,可能您在用户模型中有一个空名称,或者当前评论与用户没有关联?如果你有错误,可以在这里发布你的错误吗?