2013-11-19 2 views
0

В настоящее время у меня есть пользователи с добавленным логическим значением, установленным в False.Изменить имя пользователя boolean после подписки

Как изменить значение после того, как Пользователь создал подписку?

Я написал мой код ниже .... Новое в Rails, пожалуйста, помогите :)

МОДЕЛИ

class User < ActiveRecord::Base 
    attr_accessible :name, :username, :email, :subscribed 

    has_one :subscription, :dependent => :destroy 

end 

class Subscription < ActiveRecord::Base 
    attr_accessible :plan_id, :user_id, :email 

    belongs_to :plan 
    belongs_to :user 

    after_create :subscribed 

    def subscribed ***This is my current code 
    if self.user.subscribed == false 
     self.user.subscribed = true 
    end 
    end 

    def save_with_payment 
    if valid? 
     save_with_stripe_payment 
    end 
    end 

    def save_with_stripe_payment 
    customer = Stripe::Customer.create(card: stripe_card_token, email: email, plan: plan_id, description: "Unlimited Comics") 
    self.stripe_customer_token = customer.id 
    save! 
    rescue Stripe::InvalidRequestError => e 
    logger.error "Stripe error while creating customer: #{e.message}" 
    errors.add :base, "There was a problem with your credit card." 
    false 
    end 

end 

КОНТРОЛЛЕРЫ

class SubscriptionsController < ApplicationController 

    def new 
    plan = Plan.find(params[:plan_id]) 
    @subscription = plan.subscriptions.build 
    @subscription.user_id = current_user.id 
    end 

    def create 
    @subscription = Subscription.new(params[:subscription]) 
    if @subscription.save_with_payment 
     redirect_to @subscription, :success => "Thank you for subscribing!" 
    else 
     render :new 
    end 
    end 

end 

SHEMA

create_table "users", :force => true do |t| 
    t.string "name" 
    t.string "email" 
    t.boolean "subscribed",    :default => false ***change to True 
    t.string "username" 
    end 

    create_table "subscriptions", :force => true do |t| 
    t.integer "plan_id" 
    t.integer "user_id" 
    end 
+0

Я вижу дыру в безопасности здесь. Вредоносный пользователь может создавать подписку для кого-то другого, кроме него самого. –

ответ

4

Попробуйте следующие

after_create :subscribed 

def subscribed 
    self.user.update_attribute(:subscribed, true) unless self.user.subscribed 
end 
+0

вы должны переименовать его из 'подписанных' в' subscribe', 'подписанный' уже является атрибутом –

+1

@AmolPujari' subscribe' является атрибутом 'user', а не' subscription', и мы пишем метод в классе Подписка '... так что я думаю, что это не создаст проблемы ..... хотя я согласен с тобой имя метода должно быть значимым, как' update_user_subscribed' – RORprasad

2
def subscribed ***This is my current code 
    if self.user.subscribed == false 
     self.user.subscribed = true 
    end 
    end 

After self.user.subscribed = true add self.user.save 

Если вы упомянули отношение правильно

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