Comments (6)
The downstream code that is breaking is looping through attribute_names to pluck only the data that is specified in the SELECT query. I propose that the Transitions gem only set this field if it is SELECTed:
self[transitions_state_column_name] = self.class.get_state_machine.initial_state.to_s if self.attribute_names.include?(transitions_state_column_name)
but I'm not confident enough that this wouldn't break anything, so I'm avoiding creating a pull request in favor of discussing it first.
Yes, that sounds like a plan! Pull request would be highly welcome.:)
from transitions.
So, working on this, seems like it's not Transitions' fault. You already have
if self.has_attribute?(transitions_state_column_name) && state_not_set?
which should have us covered. Except for what I now believe is a Rails bug, at least as of 4.2.3:
[1] pry(#)> self.attribute_names
=> ["id"]
[2] pry(#)> transitions_state_column_name
=> :state
[3] pry(#)> self.attribute_names
=> ["id"]
[4] pry(#)> self.has_attribute?(transitions_state_column_name)
=> false
[5] pry(#)> self.attribute_names
=> ["state", "id"]
Digging into the Rails code, this comes from:
[3] pry(#)> self.attribute_names
=> ["id"]
[4] pry(#)> @attributes.key?(transitions_state_column_name.to_s)
=> false
[5] pry(#)> self.attribute_names
=> ["state", "id"]
[6] pry(#)> @attributes.key?(transitions_state_column_name.to_s)
=> false
(6) here is even more confusing, because now has_attribute? and attribute_names.include? will return different results. I'll look into if this is in fact a bug, and if so if it still a current bug, in Rails; in the meantime, I'm going to create a pull request changing our if statement here to use self.attribute_names.include? since this does not introduce the bug:
[1] pry(#)> self.attribute_names
=> ["id"]
[2] pry(#)> self.attribute_names.include?(transitions_state_column_name.to_s)
=> false
[3] pry(#)> self.attribute_names
=> ["id"]
from transitions.
I've confirmed that this bug does NOT happen in Rails 5. So the question is if we want the proposed solution in order to support this edge case for Rails 4 users who use custom SELECTs on models that include Transitions (like me!). I don't see a downside other than cleanliness, but barely that.
from transitions.
#144 is merged, does this fix this issue?
from transitions.
Yup, all good! Thanks!
from transitions.
Yup, all good!
On Thu, Aug 20, 2015 at 5:19 AM, Timo Rößner [email protected]
wrote:
#144 #144 is merged, does
this fix this issue?—
Reply to this email directly or view it on GitHub
#143 (comment)
.
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
- 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.