2012-11-04 3 views
12

고객이 구독을 만들 수 있도록 Spree 1.2 저장소에 추가 단계를 추가하려고합니다. 단계를 삽입하고 올바른보기를 렌더링했지만 사용자가 '저장하고 계속하기'를 클릭하면 다음 단계가 렌더링되지만 아무 것도 실제로 저장되지 않습니다.Spree 계산 프로세스에 단계 추가

나는 내가 state_callback를 추가 할 필요가 있음을 이해하지만, (그것은 아주 새로운 아마도 때문에) 현재

내가있어 나는이 작업을 수행하는 방법을 잘 모르겠어요 및 이어지고 문서는 매우이 문제를 해결 부족 내 확장에서 다음

accepts_nested_attributes이 필요하지만 결국 그래서 이것에 대한 내 dev 접근 방식은 지금까지 시행 착오를하고있다/order_decorator.rb

Spree::Order.class_eval do 
    belongs_to :subscription 

    accepts_nested_attributes_for :subscription 

    # This doesn't appear to be called 
    Spree::Order.state_machine.after_transition :from => :subscription, 
               :do => :valid_subs? 

    checkout_flow do 
    go_to_state :address 
    go_to_state :subscription 
    go_to_state :payment, :if => lambda { |order| order.payment_required? } 
    go_to_state :confirm, :if => lambda { |order| order.confirmation_required? } 
    go_to_state :complete 
    remove_transition :from => :delivery, :to => :confirm 
    end 
end 

완전히 확실하지 않음 것을

모델/마구 거기에있어.

모델

/subscription.rb

class Subscription < ActiveRecord::Base 

    attr_accessible :start_date, :frequency 

    belongs_to :user 
    has_many :orders 
    has_many :products 

    validates :start_date, :frequency, :presence => true 

    def schedule 
    ...code that returns a list of dates rendered on FE... 
    end 

    private #---- 

    ... some methods used in schedule ... 

    def valid_subs? 
    binding.pry # never called 
    end 

    def after_subscription 
    binding.pry # never called either... 
    end 
end 

보기/골라서/결제/_subscription.html.erb

<h1><%= t(:"subscription.title") %></h1> 

<div class="columns alpha six" data-hook="subscription_calendar_fieldset_wrapper"> 
    <fieldset id="subscription_calendar" data-hook> 
    <%= form.fields_for :subscription_picker do |subscription_picker| %> 
     <legend><%= t(:"subscription.first_delivery") %></legend> 
     <%= render :partial => 'subscription/picker' %> 
    <% end %> 
    </fieldset> 
</div> 

<div class="columns omega six" data-hook="subscription_dates_fieldset_wrapper"> 
    <fieldset id="subscription_dates" data-hook> 
    <legend align="center"><%= t(:"subscription.next_deliveries") %></legend> 
    <div class='dates'></div> 
    </fieldset> 
</div> 

<div class="form-buttons" data-hook="buttons" style='clear:both;'> 
    <%= submit_tag t(:save_and_continue), :class => 'continue button primary' %> 
</div> 

보기/가입/_picker.html.erb

<div class='row'> 
    <label for="subscription_frequency">Occurs every:</label> 
    <% frequency_options = [["2 Weeks", 14], ["3 Weeks", 21], ["Month", 30], ["2 Months", 60], ["3 Months", 90]] %> 
    <%= select(:subscription, :frequency, options_for_select(frequency_options, 30), {}) %> 
</div> 
<div id="start-date-picker" class="calendar"></div> 
<%= hidden_field(:subscription, :start_date, {value: (DateTime.now + 14).to_date.iso8601}) %> 

... JS that creates the calendar ... 

'저장하고 계속하기'를 클릭하면 다음 매개 변수가 전송 된 것을 확인했습니다.

{ 
        "utf8" => "✓", 
       "_method" => "put", 
    "authenticity_token" => "...BLAH...", 
      "subscription" => { 
     "frequency" => "30", 
     "start_date" => "2012-11-17" 
    }, 
       "commit" => "Save and Continue", 
      "controller" => "spree/checkout", 
       "action" => "update", 
       "state" => "subscription" 
} 
+0

데코레이터에 대한 자동 테스트가 있습니까? 검사에서 뭘 봤니? 기록은 단위 테스트 단계에서 저장됩니까? – WattsInABox

답변

3

두 가지 문제점이 있습니다. checkout_flow를 호출하면 현재 상태 시스템이 지워지고 바뀌기 때문에 콜백이 실행되지 않습니다. 전화가 checkout_flow하는 후이 코드를 이동 : 매개 변수가 순서의 일부로서 전달 될 필요가 있기 때문에

Spree::Order.state_machine.after_transition :from => :subscription, 
              :do => :valid_subs? 

둘째, 가입 정보가 저장되지 않습니다. params 객체를 파라미터는 다음과 같이 중첩 표시되어야

"order" => {  
    "subscription" => { 
     "frequency" => "30", 
     "start_date" => "2012-11-17" 
    } 
} 

당신이 할 수있는 적절한 형태로 'subscription_picker'을 선택하고 hidden_field에 전화를 부착하여 :

<%= subscription_picker.select(:frequency, options_for_select(frequency_options, 30), {}) %> 

<%= subscription_picker.hidden_field(:start_date, {value: (DateTime.now + 14).to_date.iso8601}) %> 

스타일 객체를 명시 적 매개 변수로 전달하여 스타일 및 이해 가능성을 높이는 것이 좋습니다.

건배.

관련 문제