2017-08-09 84 views
0

美好的一天!保存前檢查用戶輸入

爲了更好的理解而編輯。

第一個模型是庫存,在這個模型中我有Product_Type,Product_Name和User_ID。

第二個模型我有由First_Name,Last_Name和Pin_Number組成的用戶。

在我的庫存頁面上,我有一個表格用於檢出Product_Type和Product_Name,也是用戶放置其Pin_Number的地方。在提交時,它將檢查它們鍵入的Pin_Number並在用戶中進行驗證模型,如果Pin_Number正確,它將創建一個具有所述Product_Type,Product_Name和User_ID(從提交的Pin_Number拉)的條目。

我只是想弄清楚如何驗證它們提交的Pin_Number。

這就是爲什麼我認爲我不得不做一些基於驗證的驗證和if語句。不知道如何去做。

我希望這可以消除任何混淆。

+0

看起來你需要'before_validation'回調。 –

+0

你有會話控制器,以便你知道'current_user'嗎?用戶每次輸入密碼時,用戶是否在每次想要創建產品時都輸入密碼? – DRSE

回答

1

我只是想弄清楚如何驗證他們提交的Pin_Number。

什麼構成有效pin_number?只要它能讓你成功查找User?如果用戶輸入另一個用戶的pin_number會怎麼樣?這被認爲是「有效的」?有些事情需要考慮...

如果你想在你的問題中加入你提交的params表單,它會有幫助。但是,我們可以做一些猜測工作。

所以,讓我們假設PARAMS看起來像:

{..., "inventory"=>{"product_type"=>"foo", "product_name"=>"Bar"}, "pin_number"=>5, ...} 

在你的控制器,你可能會做這樣的事情:

if @user = User.find_by(pin_number: params[:pin_number]) 
    @inventory = Inventory.new(inventory_params) 
    @inventory.user = @user 
    if @inventory.valid? 
    @inventory.save 
    # perhaps do some other stuff... 
    else 
    # handle the case where the `@inventory` is not valid 
    end 
else 
    # handle the case where the `@user` was not found 
end 

這裏假設你有這樣的:

private 

    def inventory_params 
    params.require(:inventory).permit(:product_type, :product_name) 
    end 

在您的Inventory模型中,您可能想要做些喜歡的事情E(我很抱歉,我不是on Rails的5呢,所以一些語法可能不正確):

class Inventory < ActiveRecord::Base 

    validates :user_id, 
      :product_type, 
      :product_name, 
      presence: true 

    belongs_to :user 

end 

你可能還需要考慮在User.pin_number添加索引,如果你打算做很多發現它。

+0

請參閱已編輯的問題。 – Allen

+0

這就是我一直在尋找的,我無法弄清楚如何去做。但這個例子就是我的想法。謝謝! – Allen

+0

很高興提供幫助。此外,你澄清你的問題真的很棒 - 超級有用! – jvillian

0

不知道我是否有問題,但聽起來像是一個自定義驗證器。

您可以在「Custom Validators

而且,考慮移動類,你會建立到一個問題,這是使它成爲一個偉大的方式自定義驗證詳細瞭解Rails的官方文檔中的自定義驗證可重複使用的。您可以在this StackOverflow questionthis nice tutorial找到更多信息。

+0

謝謝我會檢查出來。 – Allen