6

如何在 Spree-2.1 + Rails4 中为 spree::user 添加新字段?

就像我的旧定制一样:===========================

Spree::User.class_eval 做

attr_accessible :f_name, :l_name :gender
validates :f_name, :presence => true, :length => {:maximum => 25}
validates :l_name, :presence => true, :length => {:maximum => 20}

结尾

具有强参数的新作品:=================================

模块 Spree UserRegistrationsController.class_eval 做

private
 def spree_user_params
   params.require(:spree_user).permit(:f_name, :l_name)
 end

end

结尾

即使它不工作,因为它得到了回滚..

请让我知道您的意见。

4

2 回答 2

13

最近对 spree_auth_devise 进行了更改,这将允许您为 Spree::User 设置允许的属性。

这是相关的代码行: https ://github.com/spree/spree_auth_devise/blob/ac27effb5998e5875261f08655e442461a031370/app/controllers/spree/user_registrations_controller.rb#L69

您需要将 f_name 和 l_name 添加到 Spree::PermittedAttributes.user_attributes,如下所示:

# in an initializer
Spree::PermittedAttributes.user_attributes << :f_name
Spree::PermittedAttributes.user_attributes << :l_name

更多关于 Spree::PermittedAttributes 的信息可以在这个拉取请求中找到:

https://github.com/spree/spree/pull/3566

于 2013-11-15T15:58:43.383 回答
1

@gmacdougall 是对的,但是我想指出,如果您在扩展程序中执行此操作,您可能希望通过装饰器执行此操作。您的扩展必须在用户通过生成器安装的初始化程序中定义它,该生成器无法维护。

# lib/spree/permitted_attributes_decorator.rb
Spree::PermittedAttributes.class_eval do
  @@user_attributes.push(:f_name, :l_name)
end

您可以在Spree:PermittedAttributes模块中为许多模型添加新属性。Spree 控制器通过Spree::Core::ControllerHelpers::StrongParameters模块包含的方法获取这些属性。

于 2014-04-20T01:40:51.753 回答