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"