创建created_by列并与rails关联?

时间:2009-08-22 03:43:59

标签: ruby-on-rails ruby activerecord model associations

叹息......我觉得这是一个很大的新手,所以我想说我有几个型号:

class Question < ActiveRecord::Base
  has_many :answers
  belongs_to :user
end

class Answer < ActiveRecord::Base
  belongs_to :question
  has_one :user
end

class User < ActiveRecord::Base
  has_many :questions
  has_many :answers, :through => :questions
end

所以我的问题是我不知道如何让用户创建问题或答案,应该在创建问题(或创建答案)时确定用户,并且用户应该来自当前用户的会话(来自authlogic的用户模型和控制器),请参见此处:

class ApplicationController < ActionController::Base

  helper_method :current_user_session, :current_user

  ...

  private

  def current_user_session
    return @current_user_session if defined?(@current_user_session)
    @current_user_session = UserSession.find
  end

  def current_user
    return @current_user if defined?(@current_user)
    @current_user = current_user_session && current_user_session.user
  end

end

现在,current_user帮助方法工作正常,但是如何设置用户创建问题或答案的用户?喜欢id喜欢说@ question.user

顺便说一下,我的问题架构有一个created_by列,但是当我创建一个新问题时,它保持为null。

2 个答案:

答案 0 :(得分:5)

关联视图的另一种方式(Rails 4&amp; 5)

belongs_to :created_by, class_name: "User", foreign_key: "created_by_id"

如果需要两个或多个与一个班级的关联(即&#34;用户&#34;)。

实施例: 我想创建User(:email,:password)并将其与profile(:name,:surname)相关联。但我也希望添加用户能够使用以下内容创建其他用户的个人资料:电子邮件(并进一步向他们发送邀请)。

  1. 创建个人资料(belongs_to 用户)和用户(has_one 个人资料)。此关联在配置文件表中创建user_id列。

  2. 在生成的配置文件表迁移文件中添加以下行:

    t.belongs_to :user, index: true, optional: true
    

    所以关联成为:

    &#34;用户 1 - 1..0 个人资料&#34;,种类关系(因此个人资料可能也可能没有 user_id

  3. 将顶部提到的关联添加到个人资料模型。

    belongs_to :created_by, class_name: "User", foreign_key: "created_by_id" 
    
  4. 在个人资料#create action

  5. 中添加@user.created_by = current_user

答案 1 :(得分:4)

而不是调用列created_by,首选方法是将列命名为user_id。使用这些名称作为外键将让rails自动“看到”关联。

在控制器中设置属性的一种简单方法是使用块:

@question = Question.new(params[:question]) do |q|
q.user_id = current_user.id
end
@question.save