Comments (6)
Not sure I follow 100% - you want something like:
self.state = :foobar
save!
to trigger whatever is defined via e.g. on_transition
, am I understanding this correctly?
from transitions.
If I define the following:
class Product
include ActiveModel::Transitions
state_machine do
state :available
state :out_of_stock, :enter => :enter_out_of_stock
end
end
I expect product.update_current_state(:out_of_stock)
to trigger enter_out_of_stock
.
I think this one at least would make sense.
On the other hand, having the same behavior with product.state = :out_of_stock
would be nice but I understand it may break some things...
from transitions.
Ah, ok, now I see what you mean. Well, the thing is, the transition methods are the canonical way to go from one state to another including callbacks and what not. I would not expect a manual state change to trigger additional action besides the state change, that's why we have dedicated methods for this.
Unless you have some really good use cases where this makes sense I'm afraid I don't see the point in this.
from transitions.
I know that the transition should be the way to go but here is my use case:
It's a prospects managing tool. Users can change the status of a prospect themselves. This means that I have to provide a select entry with the states list and they can pick any of them without any constraints.
In some cases, I need some actions done before or after the state change. I could create a transition for each state, have a virtual attribute with some kind of transition detection to call the right one but I would have to make one transition for each state and at that point I should probably forget the state machine...
Maybe you'll not see this as a use case or maybe I missed something or some concept ^^
from transitions.
Yes, I know that use case - had that one myself before.
The solution we came up with was pretty straight forward and simple:
Say, for the sake of simplicity, you are on a page where you can set the state for a record via dropdown menu (you can easily get all available states of the state machine, see the README). Now you just define a hash on the server side which maps those state names to the corresponding transitions. On form submit, you do something like this in pseudo code:
STATE_TO_TRANSITION = {
my_state: :my_method
}
def my_action
@my_object.send STATE_TO_TRANSITION[params[:my_object][:state_name]]
end
If you totally trust your users (e.g. if it's an admin interface) you can also just render the transitions in the dropdown itself, then you don't even need something like that hash from above.
from transitions.
I see what you mean. I can trust the users, it's a inner-company tool and it's ok.
But like I said, in that case I have to define a transition for each state.
I could use metaprog to iterate over each state and create a set_as_#{state}
method.
The only thing I fear is losing readability, especially in the controller.
Thanks for your help. I'll close the issue and try to work around all this ;)
from transitions.
Related Issues (20)
- getting "uninitialized constant ActiveRecord::Transitions" with rails 4.1 HOT 2
- can_event methods don't respect guards HOT 1
- Initial state is not set HOT 3
- Problem with Success Callback HOT 5
- Refactor our specs big time
- Introduce rubocop and auto-fix offenses HOT 1
- Fix all remaining rubocop offenses in lib/ and add rubocop to our travis build HOT 1
- Transitions#set_initial_state is forcibly inserting the "state" attribute HOT 6
- new feature: put exception as a param to event_failed HOT 1
- Success callback not fired HOT 1
- Passing parameters to events HOT 1
- Raise error when guard fails HOT 6
- Throw out callbacks... HOT 5
- Introduce Reek for CI HOT 1
- Introduce RDL
- available_state available_events should list states or events in the order they are defined HOT 4
- undefined method `state_machine' for nil:NilClass HOT 4
- Multiple timestamps on state transition HOT 3
- Publish 1.3.0 release HOT 2
- Tapioca DSL compiler interest?
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from transitions.