gpt4 book ai didi

ruby-on-rails - 设计注册 Controller - 拆分全名并填充名字和姓氏属性

转载 作者:数据小太阳 更新时间:2023-10-29 08:44:39 25 4
gpt4 key购买 nike

我正在使用 Devise 进行身份验证。我有一个注册表格,它访问 first_namelast_name 作为 Devise 用来创建资源的操作的一部分,在本例中是 User。 First_name 和 last_name 是我的用户模型的属性。

<% simple_form_for resource ... %>  

<%= f.input :first_name, label: false, placeholder: "Family Member's First Name", input_html: { maxlength: 15, size: 40, value: nil } %>

<%= f.input :last_name, label: false, placeholder: "Family Member's Last", input_html: { maxlength: 15, size: 40, value: nil } %>

<%= ...more fields %>

< % end %>

这工作正常,但我想改变形式。我想将 :full_name 作为单个输入字段提交,以代替我目前在表单中拥有的两个 :first_name 和 :last_name 输入字段。提交此表单后,我想:

  1. 使用此 :full_name 属性(未存储在模型中)代替 :first_name:last_name 作为一部分提交的参数

    <%= f.input :full_name, label: false, placeholder: "Family Member's Name", input_html: { maxlength: 15, size: 40, value: nil } %>
  2. full_name 参数拆分(或以某种方式解析)到 first_namelast_name(随意将此方法留空如果你愿意,只需将它放在正确的位置)

  3. :first_name 保存为 first_name 并将 :last_name 保存为 last_name。(这是我最关心的)

我看到其他答案解释了如何解析名称或在 Devise 中而不是在模型中使用属性,但我找不到如何将变量保存为提交表单后创建的资源的一部分。

最佳答案

<强>1。 Virtual Attribute

您将能够使用 attr_accessor 创建虚拟属性模型中的方法:

#app/models/user.rb
class User < ActiveRecord::Base
attr_accessor :full_name
end

您仍然需要 sanitize this attr (它只是没有被保存),无论如何你都在做。

-

<强>2。使用 before_validation callbackUser 模型中

#app/models/user.rb
class User < ActiveRecord::Base
attr_accessor :full_name
before_validation :set_names

private

def set_names
names = full_name.split
self.first_name = names.first
self.last_name = names.last
end
end

这会将提交的 full_namevirtual 属性拆分成一个数组,然后填充 first_namelast_name 属性与结果。

上述方法适用于两个名称。整理其他名称是另一个问题。

-

<强>3。参见#2


您必须记住,Devise 除了提供 Controller 支持外,与您的User 模型无关。

实际的 User 数据(通过 devise 参数)完全取决于你——我们甚至使用一个 Profile 模型,它固定在用户:

#app/models/user.rb
class User < ActiveRecord::Base
has_one :profile
before_create :build_profile
end

#app/models/profile.rb
class Profile < ActiveRecord::Base
belongs_to :user
end

关于ruby-on-rails - 设计注册 Controller - 拆分全名并填充名字和姓氏属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33358299/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com