2012-01-26 135 views
1

我有一個模型存儲與屬性user_id,product_idtoken_string我如何設計這個?

在我收集值形式user_id說明PRODUCT_ID但不token_string,因爲它會USER_ID和PRODUCT_ID保存後產生。 因此,在創建動作中,@store通常只保存兩個屬性值,並且 token_string。

但之後@store保存我想生成一個隨機token_string(不要緊如何),並把它保存到數據庫中的同一行PRODUCT_IDUSER_ID那裏是爲零(我不確定是否update_attribute會這樣做)。但最大的挑戰是從變量我有一個數字乘以令牌生成。

因此,可以說數量爲 這意味着我將產生兩個token_strings並且都被保存到同一USER_IDPRODUCT_ID。如何做我解決這個去?

預先感謝您

def create 
     @quantity=2 
     @store=Store.new(params[:store]) 

     if @store.save 
     @quantity.times{ generate token string} 
     #Then save both generated tokens to the same user_id and product_id 
     redirect_to :controller=>"products",:action=>"index" 
     else 
     redirect_to :action=>"new" 
     end 
    end 

回答

1

,如果你需要保存在同一個記錄token_string

class Store < ActiveRecord::Base 

    before_save :token_generate 

    private 

    def token_generate 
    self.token_string = Digest::SHA1.hexdigest(user_id + token_id + Time.now) 
    end 

end 

,但如果你需要用相同的USER_IDPRODUCT_ID這種方法可以幫助複製@store

# model 
class Store < ActiveRecord::Base 
    def duplicate_with_token!(quantity) 
    1.upto(quantity) do 
     obj = self.clone 
     obj.token_string = Digest::SHA1.hexdigest(user_id + token_id + Time.now) 
     obj.save 
    end 
    end 
end 

# controller 
class StoresController < ApplicationController 
    def create 
    @store=Store.new(params[:store]) 
    if @store.save 
     @store.duplicate_with_token!(2) 
     #Then save both generated tokens to the same user_id and product_id 
     redirect_to "products#index" 
    else 
     redirect_to :new 
    end 
    end 
end 
+0

我如何將它們全部保存到相同的user_id/product_id中,最後如何從Active Record類中訪問控制器中的數量? – katie

+0

謝謝,這非常有用,您的意思是product_id在什麼地方說token_id? – katie

+0

* user_id *和* token_id *取自保存的** @ store **,因此您將運行**@store.save; @商店。duplicate_with_token(2)** – Anatoly

0

可以更新現場後保存。是否還有其他複雜情況或場景存在?

0

如果我理解你是正確的,你想在保存之後更新Stores模型的屬性?所以保存後,使用update_attribute:

#Then save both generated tokens to the same user_id and product_id 
@store.update_attribute('token_string', @quantity.times{ generate token string}) 

我假設你上面的代碼示例是在控制器中,由於某種原因USER_ID和PRODUCT_ID將只提供您保存您給出解釋後。

您的「生成令牌字符串」僞代碼將在您需要的任何算法中使用@ store.user_id和/或@ store.product_id。這意味着它們的值現在已經設置,因爲您已經保存了它,它會使用這些新值更新。