【发布时间】:2014-06-01 11:46:41
【问题描述】:
我正在创建一个带有form_for 的User。此表单包含一个email 和一个auth_token。
= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f|
%div
= f.label :email
- if params[:email] == nil
= f.text_field :email
- else
= f.text_field :email, :value => params[:email]
%div
- if params[:auth_token] == nil
= f.hidden_field :auth_token
- else
= f.hidden_field :auth_token, :value => params[:auth_token]
%div
= f.submit "Send"
auth_token 实际上不是User 模型中的属性,但应该像这样在创建过程中传递和使用:
class User
include Mongoid::Document
field :email, :type => String, :default => ""
...
after_create :build_user
private
def build_user
auth_token = self.auth_token
...
end
end
现在,首先,auth_token 在通过参数时被放入表单中。但是,如果提交了表单但重新渲染,则 devise 会引发错误,因为 auth_id 不是 User 模型中的字段:
undefined method `auth_token' for #<User:0x007fd702df2b50>
另外,如果auth_token直接从用params填写的表单提交成功,那么Mongoid::Errors::UnknownAttribute当然也会被提出。
如何提交要在用户模型中使用的字段而不是实际属性?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4 devise mongoid form-for