2014-12-23 49 views
0

我有一個由8-10個屬性組成的用戶模型。 我試圖使用表單對象的概念來提取出驗證的東西到另一個UserForm類。 僅供參考我使用Rails 4 :)如何在Rails中使用表單對象保存屬性

我的控制器:

class UsersController < ApplicationController 
    def create 
    @user = UserForm.new(user_params) 
    @user.save 
    end 

    def user_params 
     # Granted permission for all 10 attributes. 
     params.require(:user).permit(:first_name, :last_name, :email....) 
    end 
end 

我的自定義類看起來是這樣的:

class UserForm < ActiveModel::Validator 
    # like this i have 10 attributes 
attr_accessor :first_name, :last_name, :email, .... 
#validation for all 10 attributes 


    def save 
    if valid? 
     persist! 
     true 
    else 
     false 
    end 
    end 

    private 
    def persist! 
     #I think this is a bad idea, putting all 10 attributes. 
     #User.create(first_name: first_name, email: email, ....) 
     # what better solution we can have here ? 
    end 

end 

現在一切都似乎相當好爲止。只是我很困惑如何獲得直接用User.create保存的所有屬性(在persist!方法中),而不是手動分配每個值?

回答

0

UserFrom.create(user_params)

而且,爲什麼不User.create(user_params)?

+0

「還有,爲什麼不User.create(user_params)?」 如果我這樣做,那麼有一個單獨的UserForm類,它將抽象出驗證和創建,保存相關的東西有什麼意義.. 保持模型中的所有業務邏輯(數據庫相關),我試圖得到基本驗證東西在一個單獨的類。順便說一句,UserForm.create(user_params)不會工作,因爲UserForm沒有任何創建方法。 – Ajay

0

你看過「Virtus」的寶石嗎?它使處理Form對象非常容易。 https://github.com/solnic/virtus

class UserForm < ActiveModel::Validator 

include Virtus.model 
attr_accessor :user 


attribute :first_name, String 
attribute :last_name, String 
attribute :email, String 
and so on.. 

    def save 
    if valid? 
     persist! 
     true 
    else 
     false 
    end 
    end 

    private 
    def persist! 
     @user = User.create(self.attributes) 
    end 

end 
相關問題