45393


rubyで作成されたプログラムについて教えて頂きたく質問させて頂きました。  
model.saveで保存がされる値と、保存されない値があり原因がわからずに困っております。

Controllerのstore.to_not_verified.saveでは  
verification_statusの値を正常に更新が出来ているのですが  
なぜか、  
store.to_verified.save  
では、値が更新されずに困っております・・・。

store.to_verified.saveの時にも、値は更新はされないのですが  
saveでエラー等は出ておりません。  
validateにも引っかかっておりません。

rubyは触り始めたばかりで、根本的に何か足りない事があるのかもしれないのですが、原因をご教授頂けませんでしょうか。

何卒、宜しくお願い致します。

Store.rb

[code]

    # Table name: stores
    #
    #  id                    :integer          not null, primary key
    #  created_at            :datetime         not null
    #  updated_at            :datetime         not null
    #  verification_status   :integer          default(0), not null
    #  verified_at           :datetime
    class Store < ActiveRecord::Base
    
        validates :verification_status,
            :inclusion => {
            :in => [ 0, 1, 2, 3 ],
            :allow_nil => true
        }
        validates :verified_at, :timeliness => { :type => :datetime, :allow_nil => true }
    
        def to_not_verified
            self.verified_at = nil
            self.verification_status = 2
            self
        end
    
        def to_verified
            self.verified_at = nil
            self.verification_status = 1
            self
        end
    end
    
[/code]

Controller

[code]

    def verified
        @verification = UserVerification.find(params[:id])
    
        ActiveRecord::Base.transaction do
            store = Store.find(1)
            store.to_verified.save
            # store.to_not_verified.save
        end
    
        rescue => e
            render action: "show", notice: 'Failed User verification.'
        else
            redirect_to admin_user_verifications_path, notice: 'User verification was successfully updated.'
    end
    
[/code]


CC BY-SA 3.0
2015-05-21T05:01:04.487
10449
2018-07-07T16:40:34.487
2015-11-02T09:07:25.263
8335
8755
question
ruby-on-rails ruby rails-activerecord
ruby で更新処理が反映されない


active record が .save して更新に(しれっと)失敗した際には、
そのオブジェクト自身から、何故更新に失敗したのかを取得できるようになっています。

[code]

    raise store.errors.to_s if store.errors.present?
    
[/code]

などを仕込んでみたりすると、開発中に何か意図しない挙動があれば、それが分かるかもしれません。


CC BY-SA 4.0
2018-07-07T16:40:34.487
45393
2018-07-07T16:40:34.487
754
10449
answer