假设我的工作表格如下所示
=form_for @survey do |f|
=f.text_field :name
=f.fields_for :questions do |question_fields|
=question_fields.text_field :question_text
=question_fields.fields_for :answers do |answer_fields|
=answer_fields.text_field :answer_text
由于表单的不同部分可以由不同的用户添加和更新,我需要一种方法在保存之前将user_id导入每个模型。我意识到能够访问模型中的current_user并不符合mvc,这就是说我没有解决方案。
如果我只保存一个对象,那么将current_user.id分配给控制器中的对象就足够了,但是考虑到这种形式的深层嵌套特性,它看起来像一个丑陋的解决方案。
有没有一种专家/铁路方式来处理这个问题?
Rails 3.2,设计
答案 0 :(得分:1)
每个对象都不能简单地从他们的“父母”关系中窃取user_id
吗?这是一种常见的模式:
class Answer < ActiveRecord::Base
before_validation :assign_user_id
protected
def assign_user_id
# Don't attempt if the question is not defined,
# or the user_id field is already populated.
return unless (self.question or self.user)
self.user_id = self.question.user_id
end
end
这涉及一些额外的数据库活动来解决每个问题的答案,因为在范围内创建它是不够的,但它使它非常简单。
创建每条记录时,您可能想要做的是user_id
参数中的内容。这意味着您的create
调用需要在:user_id
密钥中合并。但是,默认情况下,嵌套的帮助程序不会执行此操作,因此,如果您正在使用它,则可以将其保留为assign方法。