0

更新前にメソッドを呼び出して、PayPal の詳細が正しいかどうかを確認する必要があります。

私は User.rb にこれを追加しました:

 before_update :verify

 private
  def verify
  require 'httpclient'
  require 'xmlsimple'
  clnt = HTTPClient.new
    ....
      if account_status == "VERIFIED" 
        current_user.verified = "verified"
        current_user.save
        flash[:notice] = "Your account is verified"
      else 
        redirect_to :back
        flash[:error] = "Sorry, your account is not verified or you entered wrong credentials"
      end
    else
      redirect_to :back
      flash[:error] = "Your account is not verified or you entered wrong credentials"
    ...
end

end

編集:これを試しました:

   class RegistrationsController < Devise::RegistrationsController

   before_filter :verify, :only => :update 
     def verify
          ...
     end
    end

しかし、それは呼んでいません。

たぶん、ここから if を呼び出す必要があります(ただし、方法と場所がわかりません):

    class RegistrationsController < Devise::RegistrationsController

      def create
 build_resource

 if resource.save
  if resource.active_for_authentication?
    set_flash_message :notice, :signed_up if is_navigational_format?
    sign_in(resource_name, resource)
    respond_with resource, :location => after_sign_up_path_for(resource)
  else
    set_flash_message :notice, :"signed_up_but_#{resource.inactive_message}" if is_navigational_format?
    expire_session_data_after_sign_in!
    respond_with resource, :location => after_inactive_sign_up_path_for(resource)
  end
else
  redirect_to :back
  flash[:error] = "Your email has been already taken!"
 end
    end

      def update
    self.resource = resource_class.to_adapter.get!(send(:"current_#{resource_name}").to_key)

     params[:user].delete(:password) if params[:user][:password].blank?
     params[:user].delete(:password_confirmation) if params[:user][:password_confirmation].blank?

    if resource.update_attributes(params[resource_name]) 
      set_flash_message :notice, :updated if is_navigational_format?
      sign_in resource_name, resource, :bypass => true
      respond_with resource, :location => after_update_path_for(resource)
 else
       clean_up_passwords(resource)
      respond_with_navigational(resource){ render_with_scope :edit }
    end
  end

誰かがコードのエラーに気付くことができますか?

4

2 に答える 2

0

before_saveUser.rbでは、before_updateが存在しないため、before_updateの代わりにマクロを使用します

もう1つ、ユーザーモデルでflashは、コントローラーでのみ注入されるため、アクセスできません。代わりにスロー検証エラーを叫ぶか、

class User < ActiveRecord::Base

    before_save :verify

    private
    def verify(record)

      #... do checking ... and on error
      record.errors ... #is accesable, set your error here if you want to read it in controller 
       # rise here   error if you want
    end

end

activerecordコールバックの詳細

http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html

于 2012-08-18T15:05:40.487 に答える
0

これが正しい答えです:

class RegistrationsController < Devise::RegistrationsController

  before_filter :verify, :only => :update 
  def verify
    ...
  end
end

私を助けてくれてありがとう

于 2012-08-18T15:11:33.920 に答える