Rails 4.1μμ λ€μ λͺ¨λΈ
class Product < ActiveRecord::Base
scope :public, where(true)
end
λμκ²μ΄ μ€λ₯λ₯Ό μ 곡ν©λλ€ :
ArgumentError: You tried to define a scope named "public" on the model "Product", but Active Record already defined a class method with the same name.
from /usr/local/stow/ruby-2.1.1-gh-2014.3.18/lib/ruby/gems/2.1.0/gems/activerecord-4.1.1/lib/active_record/scoping/named.rb:143:in `scope'
from /tmp/scope/app/models/product.rb:2:in `<class:Product>'
from /tmp/scope/app/models/product.rb:1:in `<top (required)>'
Rails 4.0.5μλ μ€λ₯κ° μμ΅λλ€. μ΄κ²μ 4.1μ μλλ μ£Όμ λ³κ²½ μ¬νμ λκΉ?
Module.publicμ΄ http://ruby-doc.org/core-2.1.1/Module.html#method -i-public μ‘΄μ¬νλ€λ κ²μ μμμ΅λλ€.
irb(main):001:0> Product.method(:public)
=> #<Method: Class(Module)#public>
μ, μλμ μ λλ€. μμΈν λ΄μ©μ #14582 λ° μ΅κ·Ό 7e8e91cλ₯Ό μ°Έμ‘°νμΈμ.
@gsamokovarov κ°μ¬ν©λλ€!
μ, μ΄κ²μ Rails 4.1μ μλ‘μ΄ κΈ°λ₯μ λλ€. "μμ½λ" μ΄λ¦μ κ°μ§ μ΄λ¬ν λ²μλ νμ λ¬Έμ κ° λ§μκ³ λ§μ λ―Έλ¬ν λ²κ·Έμ μμΈμ΄μκΈ° λλ¬Έμ λμ ν° μλ¦¬λ‘ μ€ν¨νκΈ°λ‘ κ²°μ νμ΅λλ€.
μ΄ κ²½μ° μΆ©λμ μ μν λλ‘ Module.public λ©μλμ μμ΅λλ€. public
λΌλ λ²μλ₯Ό μ μνμ¬ public
λΌλ ν΄λμ€ λ©μλλ₯Ό λͺ¨λΈ ν΄λμ€μ μΆκ°νκ³ Module
컨νΈλ‘€ λ©μλ κ°μμ±μ μ¬μ μν©λλ€.
κ°μ₯ μ μ©ν λκΈ
μ, μ΄κ²μ Rails 4.1μ μλ‘μ΄ κΈ°λ₯μ λλ€. "μμ½λ" μ΄λ¦μ κ°μ§ μ΄λ¬ν λ²μλ νμ λ¬Έμ κ° λ§μκ³ λ§μ λ―Έλ¬ν λ²κ·Έμ μμΈμ΄μκΈ° λλ¬Έμ λμ ν° μλ¦¬λ‘ μ€ν¨νκΈ°λ‘ κ²°μ νμ΅λλ€.
μ΄ κ²½μ° μΆ©λμ μ μν λλ‘ Module.public λ©μλμ μμ΅λλ€.
public
λΌλ λ²μλ₯Ό μ μνμ¬public
λΌλ ν΄λμ€ λ©μλλ₯Ό λͺ¨λΈ ν΄λμ€μ μΆκ°νκ³Module
컨νΈλ‘€ λ©μλ κ°μμ±μ μ¬μ μν©λλ€.