2012-01-26 6 views
1

私はモデルuser_id、product_idtoken_stringというストア番号を持っています。 USER_IDとのproduct_idが保存された後に生成されようとしているので、私はのuser_idの値を収集する形でこれはどのようにして設計するのですか?

なくtoken_stringをPRODUCT_ID。 したがって、作成アクションでは、@ストアは通常2つの属性値とnil token_stringだけで保存されます。

しかし、右@storeをPRODUCT_IDとゼロがある場合をUSER_IDとして、私は(どのように関係ありません)ランダムtoken_stringを生成し、同じ行上のデータベースに保存したい保存されます(私はupdate_attributeがそうするか分からない)。しかし、最大の課題は、私がトークン生成に掛けなければならない変数からの数があることです。私はこの問題を回避行く.How

だから私は2 token_stringsを生成すると、両方が同じのuser_idに保存する必要があることを意味し数が であると言うことができますがをPRODUCT_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

あなたは同じレコードに

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 

をtoken_string保存する必要がある場合がありますが、同じuser_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 
参考にすることができ
をPRODUCT_ID
+0

どのようにそれらをすべて同じuser_id/product_idに保存し、最後にアクティブレコードクラスからコントローラの数量にアクセスするのですか? – katie

+0

ありがとう、それは非常に有用です、あなたはtoken_idと言うproduct_idを意味しましたか? – katie

+0

* user_id *と* token_id *は保存された** @ store **から取得されますので、**@store.saveを実行します。 @格納。* Time.now * – Anatoly

0

、ありがとうございました。それ以外の合併症やシナリオが存在するのでしょうか?

0

あなたのことを正しく理解していれば、保存したStoresモデルの属性を更新したいのですか?私はあなたのコードサンプルは、上記のコントローラ内で、いくつかの理由のuser_idのためであると仮定しています

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

とあなたがあなたの説明を与え保存した後のproduct_idにのみ利用できるようになります:だから保存した後、update_attribute使用。

あなたの「トークン文字列を生成する」擬似コードでは、@ store.user_idおよび/または@ store.product_idが必要なアルゴリズムに使用されます。つまり、値を保存してから設定されたことを意味し、新しい値で更新されます。

関連する問題