【问题标题】:Adding Phone Number to User Model将电话号码添加到用户模型
【发布时间】:2015-08-20 22:40:05
【问题描述】:

如果这个问题过于笼统,我们深表歉意。总的来说,我对 Rails 和开发比较陌生。我正在创建一个使用 Twilio 进行 SMS 验证的 Rails 应用程序。用户使用他们的姓名和电话号码注册该应用程序。然后,该电话号码将通过通过 SMS 发送的 pin 进行验证。我很难弄清楚使用 phone_number 模型是否更容易和/或更好,然后使用 belongs_to: 和 has_one: 在用户和 phone_numbers 之间创建关联,或者我是否可以将电话号码作为用户的一部分型号。

我使用的是 Rails 4.2.1

这是我的用户模型:

class User < ActiveRecord::Base
  has_secure_password

  validates_presence_of :name
  validates_presence_of :phone_number
  validates_uniqueness_of :phone_number
end

用户控制器:

class UsersController < ApplicationController

  def new
    @user = User.new
  end

  def create
    @user = User.new(user_params)
    if @user.save
      session[:user_id] = @user.id
      redirect_to root_url, notice: "Saved"
    else
      render 'new'
    end
  end

  private

  def user_params
    params.require(:user).permit(:name, :phone_number, :password, :password_confirmation)
  end

end

这是我一直在尝试学习的 Twilio 教程:

http://twilioinc.wpengine.com/2015/06/sms-phone-verification-in-rails-4-using-ajax-and-twilio.html

我是不是想多了?用户真的只是一个有名字的电话号码吗?

如果我最终不得不创建一个电话号码模型/控制器,我将如何修改我的路线?以及这将如何改变我的注册页面,现在包括以下内容:

  <div class="field">
    <%= f.label :phone_number %><br />
    <%= f.text_field :phone_number %>
  </div>

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4 twilio


    【解决方案1】:

    您可以将 phone_number 模型作为用户的一部分,然后使用 [:user][:phone_number] 参数来创建它。这完全取决于您以及您正在尝试建立什么样的用户体验。

    用户在注册时是否需要验证他/她的电话号码?用户创建帐户后是否必须这样做?

    在第一种情况下,您可以将电话号码设为属于用户的单独模型。您将 Twilio 集成的所有方法放在 phone_number 模型中,并在 users_controller 中使用它们。您可以通过避免 AJAX 并将其作为用户注册的下一步来简化验证步骤。

    它可能是这样的:

    在您的模型中:

        class PhoneNumber < ActiveRecord::Base
           belongs_to :user
           ...
         end
    

    在您的用户控制器中:

     def create
      @user = User.new(permitted_params)
      @phone_number = PhoneNumber.find_or_create_by(user_id: @user.id ,phone_number: params[:user][:phone_number])
      @phone_number.generate_pin
      @phone_number.send_pin
      ...
     end
    

    【讨论】:

    • 谢谢,这就是我要做的。用户确实需要验证他们的电话号码才能完成注册。我可以了解如何从您概述的初始步骤开始。感谢您的帮助!
    【解决方案2】:

    这实际上取决于您正在进行的项目以及您真正想用您的电话号码做什么。如果这只是一个简单的用例,即用户附加了电话号码并且您不必对电话号码进行任何额外的工作,那么将电话号码保留为用户的属性可能是个好主意型号。

    但是,在这种情况下,它的用例有些复杂。电话号码本身可以具有不同的属性,例如numberpinverfied,并且您必须有一个表单,您可以在其中提交 pin 并根据这些属性执行操作。在这种情况下,创建一个单独的 phone_number 模型并将其附加到使用 Rails 关联的用户绝对是一个好主意。

    同样,它可以通过任何一种方式完成,并且真正取决于项目的目的和要求。

    【讨论】:

    • 感谢您的帮助。由于代码 sn-ps,我选择了另一个,但是您两个答案的类似方法将帮助我前进。
    • @user2860664 没问题。我还想发布一些示例代码。但是,当时我很着急,不得不离开我的电脑 :-) 我很高兴你已经找到了自己的方式并且可以继续你的工作。 +1 提出一个好问题!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-10
    相关资源
    最近更新 更多