Ruby on Rails和Devise将一个表中的id与另一个表中的foreign_key id相关联

时间:2014-06-07 20:12:45

标签: ruby-on-rails devise associations

我使用devise创建了一个用户模型。在评论模型中,我设置了评论belongs_to :user。在用户模型中,我然后设置has_many: comments关系。

评论模型

class Comment < ActiveRecord::Base
  belongs_to :user
end

用户模型

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  has_many :comments
end

在评论控制器中,我有以下代码。

class CommentsController < ApplicationController

  def create
    @comment = Comment.new(params[:comment])
    @comment.user = current_user
    if @comment.save

    end
  end

......

end

在索引页面的视图中我在erb里面有这个代码,基本上是拉取用户的名字

<td><%= comment.user.first_name if comment.user %></td> 

但它根本没有显示任何内容?

基本上我在数据库中有表,User表和Comment表。我想将User表中用户的id与评论表中的foreign_keyuser_id相关联。

例如,我以用户id = 1的用户身份登录并创建了评论。当我查询数据库以检查注释时,user_id为nil

#<Comment id: 19, Ticker: "Hello", MyComment: "Test", created_at: "2014-06-07 20:07:44", updated_at: "2014-06-07 20:07:44", user_id: nil>

1 个答案:

答案 0 :(得分:1)

我认为你应该有这个;

class CommentsController < ApplicationController

  def create
    @comment = Comment.new(params[:comment])
    @comment.user_id = current_user.id
    if @comment.save

    end
  end

......

end

然后成功调用它;

<td><%= comment.user.first_name if comment.user %></td>

这是因为@comment只包含用户引用。