Ruby on rails 创建按列创建的_并与rails关联?

Ruby on rails 创建按列创建的_并与rails关联?,ruby-on-rails,ruby,activerecord,model,associations,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 :ques

叹息。。。我觉得自己在这方面是个大菜鸟,所以让我们假设我有几个模型:

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
class ApplicationController
现在,当前的_user helper方法工作得很好,但是如何设置用户创建的问题或答案?我只想说@question.user


顺便说一句,我的问题模式有一个created_by列,但当我创建一个新问题时,它保持为空

与其调用由
创建的列
,不如将该列命名为
user\u id
。使用这些外键名称将使rails自动“查看”关联

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

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

关联视图的另一种方式(Rails 4和5)

如果一个类(即“用户”)需要两个或多个关联

例如: 我想创建用户(:email,:password)并将其与配置文件(:name,:姓氏)关联。但我还想给用户添加一个功能,用他们的电子邮件创建其他用户的个人资料(并进一步向他们发送邀请)

  • 创建档案(属于用户)和用户(拥有一个档案)。此关联在配置文件表中创建用户id列

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

    t.belongs_to :user, index: true, optional: true
    
    因此,协会成为:

    “用户1-1..0配置文件”,一种关系(因此配置文件可能有也可能没有用户id)

  • 将顶部提到的关联添加到配置文件模型

    belongs_to :created_by, class_name: "User", foreign_key: "created_by_id" 
    
  • 在配置文件中添加
    @user.created_by=当前_用户
    #创建操作


  • 我意识到我想使用created_by列,但不确定为什么关联不起作用,列保持空。啊,太棒了,我明白了。。。这会将当前用户的id放在该字段中。不过我还是违背了你的建议,使用了created_by专栏。所以这听起来当然很愚蠢。。。但在我看来,我不知道如何访问用户?question.created_by.username不起作用。但是question.created_by为我提供了用户的id。想法?如果你要调用由创建的列,你需要指定该列的名称,因为默认情况下,它将假定该列名为user\u id(属于:user,:foreign\u key=>“created\u by”),然后你可以访问关联的用户:(question.user.username)哇,这比我想象的要简单得多,我的问题主要是在关联中,我定义了:has_one:user,:through=>:created_by,:foreign_key=>“created_by”我猜你的意思是答案属于:user。说answer has_one:user意味着您的用户表中有一列引用答案,这很奇怪。另外,通过说一个用户:has_many:answers:through:questions,它意味着用户B在回答用户a的问题时发布的答案属于用户a。我不确定这是否是您想要的行为。
    belongs_to :created_by, class_name: "User", foreign_key: "created_by_id"