使用attr_accessor或attr_writer进行简单的值赋值不会起作用

时间:2012-01-27 02:58:22

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1

由于某种原因,具有三个属性的@store对象将不会分配第三个值(生成的标记字符串)。该模型具有 user_id product_id token_string 。但在 token_generate函数时,没有分配任何内容,最终在数据库的token_string列中以 nil 结束。 Product_id 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 个答案:

答案 0 :(得分:2)

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