在将该对象注册到另一个对象后,我需要将一些实例方法设为私有.
我不想冻结对象,因为它必须保持可编辑状态,但功能较少.而且我不想取消这些方法,因为它们是在内部使用的.
我需要的是:
class MyClass
def my_method
puts "Hello"
end
end
a = MyClass.new
b = MyClass.new
a.my_method #=> "Hello"
a.private_instance_method(:my_method)
a.my_method #=> NoMethodError
b.my_method #=> "Hello"
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我刚开始使用rails进行编码.我正在使用:Rails 3.2.8 ruby 1.9.3p194
我创建了一个迁移和相应的模型,所有这些都在它们应该存在的文件中(为了简洁起见,我将它们全部展示在一起):
class CreateMovies < ActiveRecord::Migration
def up
create_table 'movies' do |t|
t.string 'title'
t.timestamps
end
end
def down
drop_table 'movies'
end
end
class Movie < ActiveRecord::Base
end
Run Code Online (Sandbox Code Playgroud)
所以,我想进入'rails console'并将数据库作为学习过程.
这是我输入的内容和我收到的错误消息:
1.9.3p194 :021 > k = Movie.new(:title => 'coco')
ActiveModel::MassAssignmentSecurity::Error: Can't mass-assign protected attributes: title
Run Code Online (Sandbox Code Playgroud)
我必须说如果我追加上述语句就可以正常工作:without_protection => true.
我抬头看了一下质量任务,我明白这是我们应该非常小心的事情.但是,似乎rails默认激活了质量分配保护.在我的情况下,我想使用哈希创建条目,这对调试和学习非常有用!
有没有办法去除这种保护?我想默认拥有公共属性!我怎样才能做到这一点?
奇怪的是,在我的网络研究中,我得出结论,默认情况下此功能不存在,即默认情况下ActiveModel不会创建受保护的属性.(http://stackoverflow.com/questions/3764899/is-there-a-way-to-make-rails-activerecord-attributes-private)但在我的情况下,所有属性都是私有的!
在我的代码中,将来,我应该尝试单独分配所有属性吗?这将是乏味的.是否有更好的方法来保护安全并避免这个繁琐的过程?
提前感谢您的心灵深处!