叹息......我觉得这是一个很大的新手,所以我想说我有几个型号:
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。答案 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)相关联。但我也希望添加用户能够使用以下内容创建其他用户的个人资料:电子邮件(并进一步向他们发送邀请)。
创建个人资料(belongs_to 用户)和用户(has_one 个人资料)。此关联在配置文件表中创建user_id列。
在生成的配置文件表迁移文件中添加以下行:
t.belongs_to :user, index: true, optional: true
所以关联成为:
&#34;用户 1 - 1..0 个人资料&#34;,种类关系(因此个人资料可能也可能没有 user_id )
将顶部提到的关联添加到个人资料模型。
belongs_to :created_by, class_name: "User", foreign_key: "created_by_id"
在个人资料#create action
@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