如果这个问题过于笼统,请道歉。我对Rails和开发一般都比较新。我正在创建一个使用Twilio进行SMS验证的Rails应用程序。用户使用他们的姓名和电话号码注册应用程序。然后通过SMS发送的引脚验证该电话号码。我很难确定使用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
我是否过度思考这个?用户真的只是一个带名字的phone_number吗?
如果我最终需要创建一个电话号码模型/控制器,我将如何修改我的路线?这将如何改变我的注册页面,现在包括:
<div class="field">
<%= f.label :phone_number %><br />
<%= f.text_field :phone_number %>
</div>
答案 0 :(得分:2)
您可以将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
答案 1 :(得分:1)
这实际上取决于您正在进行的项目以及您真正想要对您的电话号码做些什么。如果它只是一个简单的用例,用户附上了一个电话号码,并且您不需要使用电话号码进行任何额外的工作,那么它可能是一个好主意。将电话号码保留为用户模型的属性。
但是,在这种情况下,它有一些复杂的用例。电话号码本身可以有不同的属性,例如number
,pin
和verfied
,您必须有一个表单,您可以提交引脚并根据这些属性执行操作。在这种情况下,创建单独的phone_number模型并使用Rails关联将其附加到用户绝对是个好主意。
同样,它可以以任何一种方式完成,实际上取决于项目的目的和要求。