Rails 3:在控制器中操纵设计“资源”?

时间:2011-06-06 03:57:30

标签: ruby-on-rails-3 devise

我正在使用设计&在rails 3项目中devise_invitable,我正在尝试操作设计控制器中的一些“用户”对象字段。

行动的问题是:

  def update
    self.resource = resource_class.accept_invitation!(params[resource_name])

    resource.first_name = 'Lemmechangethis'

    if resource.errors.empty?
      set_flash_message :notice, :updated
      sign_in(resource_name, resource)
      respond_with resource, :location => after_accept_path_for(resource)
    else
      respond_with_navigational(resource){ render_with_scope :edit }
    end
  end

我原以为(注释掉的)resource.first_name调用会以与模型大致相同的方式影响资源 - 但似乎并非如此。我在此表单上仍然收到“空白”验证错误。

所以,问题是,如何在设计(和/或devise_invitable)中为用户模型指定实际需要验证的值?

任何建议表示赞赏,                               约翰

1 个答案:

答案 0 :(得分:2)

resource会返回用户模型实例。因此resource.first_name = 'Lemmechangethis'语句确实会更改您的用户模型实例,但它不会触发您的用户模型验证,这可能是resource.errors始终返回空数组的原因。触发用户模型验证的一种方法是调用resource.valid?。然后,您可以检查resource.errors数组以获取特定的错误消息。