2012-01-27 49 views
0

出于某种原因@store具有三个属性对象将不分配所述第三值(产生的令牌字符串)。该模型具有USER_IDPRODUCT_IDtoken_string。但当涉及到token_generate函数什么都没有分配,并且在数据库的token_string列中以结束。 Product_id and user_id完全保存在数据库中。但是,这里发生了什么?预先感谢您。简单赋值不会工作

class Store < ActiveRecord::Base 
    require 'digest/sha1' 

    attr_accessor :token_string 

    before_save :token_generate 

    def save_with_payment 
    #Until here the object has user_id and product_id attribute values 
    save! 
    end 

    private 

    def token_generate 
    self.token_string = Digest::SHA1.hexdigest("random string") 
    end 
end 

控制器

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

    if @store.save_with_payment 
    redirect_to :controller=>"products",:action=>"index" 
    else 
    redirect_to :action=>"new" 
    end 
end 
+1

如果token_string是数据库中的字段,为什么在模型声明中有attr_writer:token_string?这很可能会覆盖数据库访问器。 – 2012-01-27 03:03:26

+0

当您尝试保存时,您可以发布日志吗? – 2012-01-27 03:04:28

+0

在日志显示中,product_id和user_id值被插入,而token_string字段为零 – katie 2012-01-27 03:07:00

回答

2

@SrdjanPejic是正确的,请尝试删除attr_accessor :token_string线,很可能阻止设置:属性所需的INSERT语句的哈希值。

+0

这是真的。它的工作原理!谢谢! – katie 2012-01-27 03:51:02