2017-10-25 17 views
0

以下は、bookingモデルで定義されている状態です。私はbooking.aasm(:booking_state).current_stateをすればモデルごとに複数の状態(aasm)を使用しているときに特定の状態が動作していないかどうかの確認

第一状態

aasm :booking_state,namespace: :booking_state, skip_validation_on_save: true, :whiny_transitions => false do 
    state :pending, initial: true 
    state :some_other_states 
end 

第二状態

aasm :payment_state,namespace: :payment_state, skip_validation_on_save: true, :whiny_transitions => false do 
    state :pending, initial: true 
    state :some_other_states 
end 

は、今では、適切なstate名前を返します。

しかし、私がbooking.aasm(:booking_state).pending?を実行すると、ブール値の代わりにerror以下を返します。

`NoMethodError: undefined method `pending?' for #<AASM::InstanceBase:0x005611e58e4cf0>` 

ここでは何が問題になりますか?モデルごとにonestateを使用するかどうかは分かります。モデルごとにmultiple statesを使用すると動作しません。

+0

'state'は' booking_state'変数を使用し、後者は ':booking_state'シンボルを使用します。それはタイプミスですか? – mudasobwa

+0

@mudasobwaはいそれはタイプミスです。そのために残念。 – Abhilash

+1

'aasm'のマスターブランチは、' '" {{"}#{name} _#{state}?"](https://github.com/aasm/aasm/blob/master/lib/aasm/base.rb)のようなメソッドを宣言します。 #L101-L104)。つまり、 'booking.booking_state_pending? 'はうまくいくはずです。 – mudasobwa

答えて

2

名前空間が指定されている場合、aasmのマスターブランチは"#{namespace}_#{state}?"のようなメソッドを宣言します。

つまり、booking.booking_state_pending?となります。

+0

'pending state'ですべてのレコードを取得する方法はありますか? 'booking.pending'のように – Abhilash

+0

https://github.com/aasm/aasm#automatic-scopes ::' Booking.booking_state_pending'? – mudasobwa

+0

'ブール型'応答は 'booking.booking_state_pending? 'で動作します。しかし、単に 'Booking.booking_state_pending'を呼び出すと、メソッドエラーは発生しません。' NoMethodError:未定義メソッド '' – Abhilash

関連する問題