I see, makes sense, thanks! :)

Cheers,

Gabriel Sobrinho
gabrielsobrinho.com

On Nov 5, 2013, at 1:03 PM, Rafael Mendonça França <[email protected]> 
wrote:

> I prefer to stick with that decision.
> 
> It is easier to teach people when we say "Relations are immutables" than 
> "Relations are immutables, unless you call these methods, or someone called 
> they in some plugin".
> 
> Documentation will help, but it will not solve. In the same way you didn't 
> read that these methods are private API (they are not even listed in the API 
> site) people will not read the gotcha in the documentation.
> 
> Also I don't why we should complicate the relation API even more adding a new 
> exception and new methods only to make possible to people able to call these 
> bang methods.
> 
> Rafael Mendonça França
> http://twitter.com/rafaelfranca
> https://github.com/rafaelfranca
> 
> 
> On Tue, Nov 5, 2013 at 10:55 AM, Gabriel Sobrinho 
> <[email protected]> wrote:
> França, 
> 
> I'm too late to the party, I thought these bang methods was public on rails 4 
> :(
> 
> We will have people doing wrong things with these methods but a good 
> documentation will reduce that, ruby itself have a lot of these methods like 
> params.merge!(..) or controller_name.gsub!(...) and I never saw people (that 
> do not means there is no people reporting, I just don't saw) reporting issues 
> because things like that.
> 
> The problem of scopes that must not be mutated can be solved using some 
> freeze implementation on that scope, like this:
> 
>   relation = User.where(:dumb => false).immutable!
>   relation.where!(:dumb => true)
>   #=> raises ActiveRecord::ImmutableRelation
> 
> I agree that new developers may do strange things but the rails itself is not 
> so easy for beginners, but I have no expertise about how it may impact the 
> community, so if you guys think that won't be great these methods be public, 
> :okaymeme:
> 
> 
> Gary,
> 
> What I usually do when "mutable relations" makes sense are filters like that: 
> https://gist.github.com/sobrinho/7318585
> 
> 
> On Monday, November 4, 2013 1:01:59 PM UTC-2, Rafael Mendonça França wrote:
> Yes, there is 
> https://github.com/rails/rails/commit/8c2c60511beaad05a218e73c4918ab89fb1804f0#commitcomment-2211685
> 
> Rafael Mendonça França
> http://twitter.com/rafaelfranca
> https://github.com/rafaelfranca
> 
> 
> On Mon, Nov 4, 2013 at 11:53 AM, Gabriel Sobrinho <[email protected]> 
> wrote:
> França,
> 
> There is a reason for that? They sound useful in a lot of scenarios.
> 
> On Wednesday, October 30, 2013 2:02:54 PM UTC-2, Rafael Mendonça França wrote:
> The bang methods are private and should not be used in applications (see the 
> :nodoc: in the method definition)
> 
> Rafael Mendonça França
> http://twitter.com/rafaelfranca
> https://github.com/rafaelfranca
> 
> 
> On Wed, Oct 30, 2013 at 1:51 PM, Gary Weaver <[email protected]> wrote:
> I understand that bang methods in the classic Ruby sense are supposed to 
> alter the current instance, but getting errors like:
> 
> NoMethodError: undefined method `where!' for #<Class:0x007ff1522d3110>
> 
> and
> 
> NoMethodError: undefined method `includes!' for #<Class:0x007ff1522d3110>
> 
> when calling the bang methods from QueryMethods on a model class are really 
> not helpful.
> 
> It's understandable that you don't want to pass a model class into a method 
> that expects a relation that it can act upon and change with a bang query 
> method and have it successfully create a new relation and call some method on 
> it that is never again seen, hence the error. I also understand wanting to 
> avoid any more checking/raising code than necessary in ActiveRecord both for 
> maintainability, clarity, and maybe efficiency- but just look at this:
> 
> 2.0.0p247 :001 > MyModel.to_s
>  => "MyModel" 
> 2.0.0p247 :002 > MyModel.new.to_s
>  => "#< MyModel:0x007fc92aa017e8>" 
> 2.0.0p247 :003 > MyModel.where({})
>  => ...
> 2.0.0p247 :003 > MyModel.where!({})
> NoMethodError: undefined method `where!' for #<Class:0x007fc92a95a240>
> 
> Thanks!
> 
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Ruby on Rails: Core" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected].
> To post to this group, send email to [email protected].
> 
> Visit this group at http://groups.google.com/group/rubyonrails-core.
> For more options, visit https://groups.google.com/groups/opt_out.
> 
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Ruby on Rails: Core" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/rubyonrails-core.
> For more options, visit https://groups.google.com/groups/opt_out.
> 
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Ruby on Rails: Core" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/rubyonrails-core.
> For more options, visit https://groups.google.com/groups/opt_out.
> 
> 
> -- 
> You received this message because you are subscribed to a topic in the Google 
> Groups "Ruby on Rails: Core" group.
> To unsubscribe from this topic, visit 
> https://groups.google.com/d/topic/rubyonrails-core/4YusNsRI4Kk/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to 
> [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/rubyonrails-core.
> For more options, visit https://groups.google.com/groups/opt_out.

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Core" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/rubyonrails-core.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to