разделение просмотров сведений о моей подписке на полосу

У меня есть полоса подписки на моем сайте. вчера я создал базовый способ просмотра истории платежей и использованных карт. теперь я хочу разбить это на два представления, чтобы история платежей находилась на одной странице, а используемые карты — на другой странице. Я чувствую, что должен что-то упустить, но когда я пытался это сделать, на странице ничего не отображалось. Я довольно новичок в рельсах, поэтому вся эта штука с подпиской на полосу была немного сложной, но добраться туда. Это исходный код, может кто-нибудь дать некоторые рекомендации относительно шагов, которые мне нужно выполнить. Я попытался буквально разделить это на два разных файла представления, но это не сработало, поэтому я вернулся туда, где был изначально!

подписки/show.html.erb

<h1>View your payment history and cards</h1>

<h4><%= @charges.data.length %> Charges! </h4>
<% @charges.data.each do |charge| %>
     <%= charge.statement_description %>
    £<%= charge.amount %>
    <%= Time.at(charge.created).strftime("%d/%m/%y") %>
<% end %>


<h4><%= @charges.data.length %> Cards! </h4>
<% @cards.each do |card| %>
    <%= card.brand %>
    **** **** **** <%= card.last4 %>
    <%= card.exp_month %>/<%= card.exp_year %>
<% end %> 

контроллер подписки:

class SubscriptionsController < ApplicationController
  def new
    @subscription = Subscription.new
  end

 def create
  # raise 'a'
  @subscription = Subscription.new(params[:subscription].permit(:stripe_card_token))
  @subscription.user = current_user
  if @subscription.save_with_payment(params[:plan]) #(current_user)
    redirect_to @subscription, :notice => "Thank you for subscribing!"
  else
    render :new
  end
end

  def destroy
  end

  def show
    customer_token = current_user.subscription.try(:stripe_customer_token)
    @charges = customer_token ? Stripe::Charge.all(customer: customer_token) : []
    @cards =  customer_token ? Stripe::Customer.retrieve(customer_token).cards : []
  end


end

модель подписки

class Subscription < ActiveRecord::Base
  belongs_to :user
  validates_presence_of :user_id #it should be always compulsary
  # attr_accessible :plan

  attr_accessor :stripe_card_token

  def save_with_payment(plan)
    if valid?
      customer = Stripe::Customer.create(description: 'subscription', plan: plan, card: stripe_card_token)
      self.stripe_customer_token = customer.id
      save!
    end
  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

person Lilp    schedule 17.09.2014    source источник


Ответы (1)


Самый простой способ добиться этого — создать 2 метода в контроллере (например, payments и cards):

def payments
  customer_token = current_user.subscription.try(:stripe_customer_token)
  @charges = customer_token ? Stripe::Charge.all(customer: customer_token) : []
end

def cards
  customer_token = current_user.subscription.try(:stripe_customer_token)
  @cards =  customer_token ? Stripe::Customer.retrieve(customer_token).cards : []
end

создайте для них 2 представления (payments.html.erb и cards.html.erb в каталоге /views/subscriptions/):

платежи.html.erb:

<h1>View your payment history</h1>
<h4><%= @charges.data.length %> Charges! </h4>
<% @charges.data.each do |charge| %>
     <%= charge.statement_description %>
    £<%= charge.amount %>
    <%= Time.at(charge.created).strftime("%d/%m/%y") %>
<% end %>

карты.html.erb:

<h1>View your cards</h1>
<h4><%= @charges.data.length %> Cards! </h4>
<% @cards.each do |card| %>
    <%= card.brand %>
    **** **** **** <%= card.last4 %>
    <%= card.exp_month %>/<%= card.exp_year %>
<% end %> 

и редактировать маршруты:

resources :subscriptions do
  get '/payments', to: 'subscriptions#payments' # or get 'subscriptions/payments', to: 'subscriptions#payments' (depending on which link you would like to see)
  get '/cards', to: 'subscriptions#cards'
end

Это было бы в значительной степени это. Запустите rake routes, чтобы увидеть сгенерированные маршруты, чтобы использовать их правильно, и все готово. Пожалуйста, проверьте орфографические ошибки на случай, если вы что-то скопируете - не уверен, что я их не делал.

person Andrey Deineko    schedule 17.09.2014
comment
не могли бы вы уточнить, были ли у меня изначально следующие маршруты, как я должен изменить их, чтобы принять во внимание вышеизложенное - person Lilp; 18.09.2014
comment
ресурсы :подписки, только: [:new, :create, :destroy, :show] - person Lilp; 18.09.2014
comment
Привет! извините за поздний ответ, вчера был очень занят. Он будет работать в рамках определения вашего ресурса, поэтому любые необходимые модификации - person Andrey Deineko; 19.09.2014