Rails rails 中多表关联的问题

fortunezhang · 2013年05月30日 · 最后由 babyhai 回复于 2017年06月01日 · 4187 次阅读

是这样的,我有一个用户表 User:name,pwd,一个新闻表 News:title,content,author,还有一个评论表 Comment:commenter_id ,content ,同时他属于 news 和 user,

当我显示文章及其所有评论的时候,我这样的,比如说 news/1,来显示文章内容,显示评论是 @news.comment.each 来显示,创建一个 comment 时,是 @news = News.find(params[:news_id]) @comment = @news.comments.create(:commenter_id=>1,:content=> params[:comment]['content'],:is_show_public=> false,:user_id =>@user.id )

,我想问的是,怎么显示评论的时候,显示这个评论是谁写的。我是这样想的,根据 comment 可以得到 user_id ,事实上是 nil,然后根据这个 user_id 去得到 user 的 name,怎么操作。 或者可以给个参考也行。提前谢过。

就是 comments 表里面放一个 user_id,在模型里面表现为 belongs_to :user。

2 楼 已删除

#1 楼 @Rei class Comment < ActiveRecord::Base belongs_to :user belongs_to :news attr_accessible :commenter_id, :content, :is_show_public end 已经写好了。我是新手,我觉得问题处在我创建 comment 的时候哦,因为 @comment2 = @user.comments.create(:commenter_id=>1,:content=> params[:comment]['content'],:is_show_public=> false ) 传见出来的 comment 可以看到 new_id 是空。我本来在 show 的页面想这样写的 <%= comment.user %> 结果不正确。https://github.com/FortuneZhang/XinWen这是我的代码,希望你帮我看看。谢过。

亲,麻烦把你的代码先把格式弄好行么。。。看的晕。。。 在这个评论框下面有方法。先调整一下吧。

在你的 app / models / comment.rb 中加入 user_id 修改如下: class Comment < ActiveRecord::Base belongs_to :user belongs_to :news attr_accessible :commenter_id, :content, :is_show_public, :user_id end 你可以进入 rails c 下调试。

#3 楼 @fortunezhang

class Comment < ActiveRecord::Base
  belongs_to :user
  belongs_to :news
  attr_accessible :commenter_id, :content, :is_show_public # <- 这里已经禁止用参数方式传 user_id 了
end

把 controller 里面代码改成

@comment = @news.comments.create(:commenter_id=>1,:content=> params[:comment]['content'],:is_show_public=> false )
@comment.user = @user

#6 楼 @Rei 恩,好的,果然行。谢谢。谢谢。。。

fortunezhang 回复

你这个问题解决了么 我也遇到相同的问题了,可以参考一下你的代码么?😳

需要 登录 后方可回复, 如果你还没有账号请 注册新账号