相关疑难解决方法(0)

在运行时将实例方法设为私有

在将该对象注册到另一个对象后,我需要将一些实例方法设为私有.

我不想冻结对象,因为它必须保持可编辑状态,但功能较少.而且我不想取消这些方法,因为它们是在内部使用的.

我需要的是:

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)

有任何想法吗?

ruby access-specifier

5
推荐指数
3
解决办法
5024
查看次数

ActiveRecord:默认情况下受保护的属性.他们怎么可以公开?

我刚开始使用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)但在我的情况下,所有属性都是私有的!

在我的代码中,将来,我应该尝试单独分配所有属性吗?这将是乏味的.是否有更好的方法来保护安全并避免这个繁琐的过程?

提前感谢您的心灵深处!

attributes ruby-on-rails rails-activerecord

1
推荐指数
1
解决办法
3155
查看次数