Excellent start Yuki!

I started working on this as well on Friday and came to pretty much the
same solution.

I would have just left my changes in favor of Yuki's PR, but I think is
misses the point.
The idea is for rails to stop calling x.class.model_name, and only call
x.model_name.

I've started another PR making those changes:
https://github.com/rails/rails/pull/15889

There's still two things to address:

   1. I've left a few REVIEW comments. I'm looking for feedback there, but
   will remove them and rebase soon enough.
   2. I'm still working on a warning to address the issue that Andy
   Jeffries brought up in this thread.
   I'm thinking it should just be a warning. I'm digging into it now; does
   anyone know of an example of rails currently doing this?


Thanks!

-Amiel


On Mon, Jun 23, 2014 at 6:42 AM, Yuki Nishijima <m...@yukinishijima.net>
wrote:

> Pull request sent: https://github.com/rails/rails/pull/15871
>
>
> On Fri, Jun 20, 2014 at 7:15 AM, DHH <da...@loudthinking.com> wrote:
>
>> I'm very much in favor of this as well. Please make it so. To address
>> Andy's concerns, we should have proper error messages if this is
>> overwriting an attribute of the same name. But it's too convenient not to
>> have.
>>
>>
>> On Friday, May 30, 2014 8:11:53 PM UTC+2, Jeremy Friesen wrote:
>>>
>>> Following up on https://github.com/rails/rails/issues/15428, with
>>> adjustments.
>>>
>>> Throughout the Rails code there are a few references to
>>> `object.class.model_name`. Instead of always pushing this up to the class,
>>> it makes sense to me that we ask the model for its model_name.
>>>
>>> This might obviate the need for the dubious
>>> ActionController::ModelNaming#model_name_from_record_or_class,
>>> https://github.com/rails/rails/blob/master/actionpack/
>>> lib/action_controller/model_naming.rb
>>>
>>>
>>>
>>> module ActionController
>>>   module ModelNaming
>>>
>>>     # Converts the given object to an ActiveModel compliant one.
>>>
>>>
>>>     def convert_to_model(object)
>>>       object.respond_to?(:to_model) ? object.to_model : object
>>>
>>>     end
>>>
>>>     def model_name_from_record_or_class(record_or_class)
>>>
>>>       (record_or_class.is_a?(Class) ? record_or_class : 
>>> convert_to_model(record_or_class).class).model_name
>>>
>>>     end
>>>   end
>>>
>>> end
>>>
>>>
>>> Example:
>>>
>>> class Foo
>>>   extend ActiveModel::Naming
>>>   def model_name
>>>     class.model_name
>>>   endend
>>> Foo.respond_to?(:model_name)=> true
>>> Foo.new.respond_to?(:model_name)=> true
>>> Foo.model_name == Foo.new.model_name=> true
>>>
>>>  --
>> 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 rubyonrails-core+unsubscr...@googlegroups.com.
>> To post to this group, send email to rubyonrails-core@googlegroups.com.
>> Visit this group at http://groups.google.com/group/rubyonrails-core.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>  --
> 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 rubyonrails-core+unsubscr...@googlegroups.com.
> To post to this group, send email to rubyonrails-core@googlegroups.com.
> Visit this group at http://groups.google.com/group/rubyonrails-core.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
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 rubyonrails-core+unsubscr...@googlegroups.com.
To post to this group, send email to rubyonrails-core@googlegroups.com.
Visit this group at http://groups.google.com/group/rubyonrails-core.
For more options, visit https://groups.google.com/d/optout.

Reply via email to