고객이 구독을 만들 수 있도록 Spree 1.2 저장소에 추가 단계를 추가하려고합니다. 단계를 삽입하고 올바른보기를 렌더링했지만 사용자가 '저장하고 계속하기'를 클릭하면 다음 단계가 렌더링되지만 아무 것도 실제로 저장되지 않습니다.Spree 계산 프로세스에 단계 추가
나는 내가 state_callback를 추가 할 필요가 있음을 이해하지만, (그것은 아주 새로운 아마도 때문에) 현재
내가있어 나는이 작업을 수행하는 방법을 잘 모르겠어요 및 이어지고 문서는 매우이 문제를 해결 부족 내 확장에서 다음
accepts_nested_attributes이 필요하지만 결국 그래서 이것에 대한 내 dev 접근 방식은 지금까지 시행 착오를하고있다/order_decorator.rbSpree::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"
}
데코레이터에 대한 자동 테스트가 있습니까? 검사에서 뭘 봤니? 기록은 단위 테스트 단계에서 저장됩니까? – WattsInABox