2016-05-06 2 views
0

Мой стандартный current_user.role не меняет свою премию в моем ChargesController действии, хотя мое действие create (post) следует за ним. Мое действие понижения в моем UserController выполняется правильно и изменяет роль пользователя, которую просто найти, используя тот же самый current_user.role = 'new_role_here'. Мне любопытно, почему мой current_user.role не меняется при успешном сохранении сообщения? Любая помощь будет оценена, спасибо.current_user.role не меняется при обновлении (Stripe)

ChargesController Использование полосой

before_action :require_sign_in 

def new 
    @stripe_btn_data = { 
     key: Rails.configuration.stripe[:publishable_key].to_s, 
     description: "BigMoney Membership - #{current_user.email}", 
     amount: 10 
    } 
end 

def create 
    @amount = 500 

    customer = Stripe::Customer.create(
     email: current_user.email, 
     source: params[:stripeToken] 
) 

    charge = Stripe::Charge.create(
     customer: customer.id, 
     amount: @amount, 
     description: "BigMoney Membership - #{current_user.email}", 
     currency: 'usd' 
) 

    current_user.role = 'premium' 

    if current_user.save! 
     flash[:notice] = "Thanks for all the money, #{current_user.email}! changed to premium member, #{current_user.role}" 
     redirect_to wikis_path # or wherever 
    end 

    # Stripe will send back CardErrors, with friendly messages 
    # when something goes wrong. 
    # This `rescue block` catches and displays those errors. 
    rescue Stripe::CardError => e 
     flash[:alert] = e.message 
     redirect_to new_charge_path 
    end 
end 

заряды/new.html.erb

<%= form_tag charges_path do %> 
    <article> 
<% if flash[:error].present? %> 
    <div id="error_explanation"> 
    <p><%= flash[:error] %></p> 
    </div> 
<% end %> 
<label class="amount"> 
    <span>Amount: $5.00</span> 
</label> 
    </article> 

    <script src="https://checkout.stripe.com/checkout.js" class="stripe-button" 
     data-key="<%= Rails.configuration.stripe[:publishable_key] %>" 
     data-description="A month's subscription" 
     data-amount="500" 
     data-locale="auto"></script> 
<% end %> 

маршруты

Rails.application.routes.draw do 

    get 'charges/create' 

    get "log_in" => 'sessions#new', :as => "log_in" 
    get "log_out" => 'sessions#destroy', :as => "log_out" 


    get "sign_up" => "users#new", :as => "sign_up" 

    get "my_account" => "users#show", :as => "my_account" 

    get 'users/confirm' => 'users#confirm' 

    root :to => "sessions#new" 

    resources :users 
    resources :sessions 
    resources :wikis 
    resources :charges, only: [:new, :create] 

ответ

2

Я понял, что если я использовал current_user.update_attribute(:role, 'premium') вместо current_user.role = 'premium, это сработало.

+0

Обязательно принимайте свой ответ, когда сможете. Это правильный ответ, и он поможет другим, кто знает этот вопрос. Кроме того, вы получаете очки и новый значок для этого. : D –

+0

сделаю. Приходится ждать 48 часов;) – DustinRW

Смежные вопросы