2015-08-20 43 views
4

如果此問題太籠統,請道歉。我對Rails和整體開發相對陌生。我正在創建一個使用Twilio進行SMS驗證的Rails應用程序。用戶使用他們的姓名和電話號碼註冊該應用程序。那個電話號碼就可以通過SMS發送的PIN碼進行驗證。我很難判斷使用phone_number模型是否更容易和/或更好,然後使用belongs_to和has_one創建用戶和電話號碼之間的關聯:或者如果我可以將電話號碼作爲用戶的一部分模型。將電話號碼添加到用戶模型

我用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> 

回答

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

謝謝,這就是我要做的。用戶確實需要驗證他們的電話號碼才能完成註冊。我可以看到如何從您所概述的初始步驟開始。謝謝您的幫助! – user2860664

1

這真的取決於您所從事的項目,你真的想與你的電話號碼,該怎麼辦。如果這只是一個簡單的用例,用戶有一個電話號碼附加到它,你不需要做任何額外的電話號碼工作,那麼把電話號碼作爲用戶的一個屬性保留是個好主意模型。

但是,在這種情況下,它有一些複雜的用例。電話號碼本身可以有不同的屬性,如numberpinverfied,你必須有一個表格,你可以提交這個pin並根據這些做些什麼。在這種情況下,創建一個單獨的phone_number模型並將其附加到使用Rails關聯的用戶絕對是一個好主意。

再次,它可以做到這一點,並且實際上取決於項目的目的和要求。

+0

感謝您有用的答案。我選擇了另一個,因爲代碼片段,但是兩個答案的類似方法將幫助我前進。 – user2860664

+0

@ user2860664沒問題。我也想發佈一些示例代碼。但是,當時我很匆忙,不得不離開我的電腦:-)我很高興你已經找到了自己的路,並可以繼續工作。 +1一個很好的問題! –