所以,我是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
答案 0 :(得分:0)
不,您不必单独从db中获取@users或@comments。当您尝试访问其参数时,Rails将查询它们。
def index
@posts = Post.all
end
就够了。
您可以获得评论它的用户的用户名,就像
一样<%= comment.user.fname %>
或发布帖子的人的姓名:
<%= post.user.fname %>
如果它没有为您提供用户名,可能您在用户模型中有一个空名称,或者当前评论与用户没有关联?如果你有错误,可以在这里发布你的错误吗?