Coder Social home page Coder Social logo

Comments (6)

troessner avatar troessner commented on August 21, 2024
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.

ozydingo avatar ozydingo commented on August 21, 2024

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.

ozydingo avatar ozydingo commented on August 21, 2024

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.

troessner avatar troessner commented on August 21, 2024

#144 is merged, does this fix this issue?

from transitions.

ozydingo avatar ozydingo commented on August 21, 2024

Yup, all good! Thanks!

from transitions.

ozydingo avatar ozydingo commented on August 21, 2024

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.