首页 > 解决方案 > Ruby on Rails 编辑表单以显示助手中的 first_name 和 last_name

问题描述

我是 Rails 的初学者。我有一个用户模型,它有一个名为名称的字段。将通过加入我从输入表单中获得的 first_name 和 last_name (name = "#{first_name} #{last_name}" 值来输入用户名。但是当我尝试编辑用户时,我正在拆分数据库中名称的值并将其显示在视图中。(name.split('').first 为 first_name 和 name.split('').last 为来自 users_helper 的 last_name。但这里的问题是,如果first_name 的值是 Veronica Roth,last_name 是 Taylor,在视图中显示的值是 Veronica for first_name,Taylor for last_name。

用户.rb

class User < ActiveRecord::Base

  acts_as_paranoid
  validates :email, format: { with: Devise.email_regexp }

  attr_accessor :first_name, :last_name

end

users_helper.rb

module UsersHelper
  def get_form_value(form_name, user)
    form_value = ''
    case form_name
    when "first_name"
      if user.present? and user.name.present?
        form_value = user.name.split(" ").first
      end
    when "last_name"
      if user.present? and user.name.present?
        form_value = user.name.split(" ").last
      end
    end
end

标签: stringformsruby-on-rails-4inputsplit

解决方案


如果我理解正确,您希望将除 name 数组中的最后一个元素(使用拆分 name 属性生成的元素)之外的所有元素视为 thefirst_name并且last_name始终具有 name 数组中最后一个元素的值.

如果是这种情况,您可以简单地执行以下操作:

*first_name, last_name = user.name.split(' ')
first_name = first_name.join(' ')

我们在这里所做的只是将我们的名称数组解构为两个变量,first_name并且last_name,关键字*之前的运算符first_name称为 splat 运算符。在这种情况下,它会将除最后一个元素之外的每个元素都收集到一个数组中,然后我们使用该join方法将该数组连接到一个字符串中。

您可以在此处阅读有关破坏的更多信息:https ://jsarbada.wordpress.com/2019/02/05/destructuring-with-ruby/


推荐阅读