我的模型商店包含 user_id,product_id 和 token_string 属性。
在表单中我收集 user_id 和 product_id 的值,但不收集 token_string ,因为它将在user_id和product_id保存后生成。 因此,在创建操作中, @store 通常只保存两个属性值并且 nil token_string。
但是在保存 @store 之后我想生成一个随机的token_string(无关紧要)并将其保存到与 product_id 相同的行中的数据库中和 user_id ,其中有 nil (我不确定update_attribute是否会这样做)。但最大的挑战是变量中的数字必须乘以令牌生成
因此,我们可以说数字 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
答案 0 :(得分: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_id 和 product_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
答案 1 :(得分:0)
您可以在保存后更新字段。是否还有其他复杂情况或情景?
答案 2 :(得分:0)
如果我理解正确,您希望在保存后更新商店模型的属性吗?因此,保存后,请使用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只有在您保存后才能提供解释。
您的&#34;生成令牌字符串&#34;伪代码会在您需要的算法中使用@ store.user_id和/或@ store.product_id。这意味着它们的值现在已经设置好了,因此您可以使用这些新值进行更新。