2010-06-07 28 views
5

Tôi đã tích hợp thành công viên đá quý AASM gần đây nhất vào một ứng dụng, sử dụng nó để tạo trình hướng dẫn. Trong trường hợp của tôi, tôi có một thứ tự mẫuLấy danh sách các tiểu bang/sự kiện từ một mô hình mà AASM

class Order < ActiveRecord::Base 

    belongs_to :user 
    has_one :billing_plan, :dependent => :destroy 
    named_scope :with_user, ..... <snip> 

    include AASM 

    aasm_column :aasm_state 
    aasm_initial_state :unauthenticated_user 

    aasm_state :unauthenticated_user, :after_exit => [:set_state_completed] 
    aasm_state : <snip> 

    <and following the event definitions> 

end 

Bây giờ tôi muốn cung cấp cho quản trị viên khả năng tạo biểu đồ của riêng mình thông qua các tiểu bang AASM. Vì vậy, tôi tạo ra hai mô hình bổ sung được gọi là OrderFlow và Transition, nơi có order_flow có nhiều chuyển tiếp và thứ tự thuộc về order_flow.

Không có vấn đề gì cho đến nay. Bây giờ tôi muốn cung cấp cho quản trị viên của tôi khả năng tự động thêm các chuyển đổi/sự kiện hiện có vào biểu đồ order_flow.

Vấn đề bây giờ là, tôi không tìm thấy bất kỳ khả năng nào để có được danh sách tất cả các sự kiện/chuyển tiếp trong mô hình đặt hàng của tôi. aasm_states_for_select có vẻ là ứng cử viên chính xác, nhưng tôi không thể gọi nó trên mẫu đơn đặt hàng của tôi.

Có ai giúp được không?

Thx trước. J.

Trả lời

3

Tôi không hiểu cách OrderFlow hoạt động với Thứ tự và chuyển tiếp, nhưng tôi cho rằng bạn chỉ đưa vào đó để giải thích kịch bản của mình tốt hơn.

ClassName.aasm_states_for_select cung cấp cho bạn danh sách các trạng thái được khai báo trong mô hình.

+7

Không được dùng nữa. Sử dụng 'ClassName.aasm.states_for_select'. –

1

cũng không đảm bảo 100% những gì bạn đang yêu cầu, nhưng nếu bạn muốn tất cả các trạng thái và sự kiện được khai báo cho mô hình của mình, bạn có thể nhận được các trạng thái đó bằng cách gọi Order.aasm_states và Order.aasm_events.

0

Một cú pháp Ruby thanh lịch hơn có thể được sử dụng, như trong ví dụ này trong IRB bên dưới. Bạn nhận được tất cả các trạng thái cho phép trong một mảng các biểu tượng.

1.9.3-p0 :011 > ApprovalRequest.aasm_states.map(&:name) 

=> [: tạo ra,: gửi,: từ chối,: phê duyệt]

2

Với phiên bản 3.0.18, bạn có thể nên sử dụng ClassName.aasm.states

+1

'ClassName.aasm.states.map (&: name)' sẽ đưa bạn một mảng Ký hiệu, có thể là những gì bạn muốn. – rattray

0

Đối sự kiện trong 3.1.1 tôi đã sử dụng Model.aasm.events.keys để có được một mảng các ký hiệu tên sự kiện. Trong các phiên bản gần đây .map(&:name) sẽ không làm điều đó cho bạn.

Các vấn đề liên quan