如果没有我设置attr_accessor,Rails已经有了getter和setter.如何阻止所有的二传手?

cbr*_*ron 1 ruby-on-rails attr-accessor

这是我的课,你可以看到,没有attr_accessor

class LegacyBlogPost < ActiveRecord::Base
  establish_connection Rails.configuration.database_configuration['blogs']
  self.table_name = 'blogpost'
  self.primary_key = 'post_id'
end
Run Code Online (Sandbox Code Playgroud)

但我仍然可以读写所有变量.这是默认行为吗?

x = LegacyBlogPost.find(172925)
x.title += "."
x.save
=> true
Run Code Online (Sandbox Code Playgroud)

我的主要问题是,我如何避免写这门课?我明白我可以让mysql用户只允许做select语句.另外我相信我可以重新编写rails setter,只要方法被击中就返回.但是我假设我只是为了一切设置了attr_reader,作家就不会在那里.

Hit*_*eeb 5

ActiveRecord 自动创建getters\setters以读取所有列的\ write

如果你想让模型成为只读的

class LegacyBlogPost < ActiveRecord::Base
  def readonly?
    return true
  end
end
Run Code Online (Sandbox Code Playgroud)

为了防止它被破坏,你可以使用

def before_destroy
  raise ActiveRecord::ReadOnlyRecord
end
Run Code Online (Sandbox Code Playgroud)

信用http://blog.zobie.com/2009/01/read-only-models-in-activerecord/