0

假设我有一个如下所示的工作表单

=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,设计

4

1 回答 1

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 方法。

于 2012-05-02T19:04:20.900 回答