1

这是我的课程,如您所见,没有 attr_accessor

class LegacyBlogPost < ActiveRecord::Base
  establish_connection Rails.configuration.database_configuration['blogs']
  self.table_name = 'blogpost'
  self.primary_key = 'post_id'
end

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

x = LegacyBlogPost.find(172925)
x.title += "."
x.save
=> true

不过,我的主要问题是,我如何避免给这门课写信?我知道我可以让 mysql 用户只被允许做选择语句。此外,我相信我可以重新编写 rails 设置器,以便在方法被命中后立即返回。但我曾假设如果我只是为所有内容设置 attr_reader's,那么作者就不会在那里。

4

2 回答 2

5

ActiveRecord自动为所有列创建 getter\setter 以读取\写入

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

class LegacyBlogPost < ActiveRecord::Base
  def readonly?
    return true
  end
end

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

def before_destroy
  raise ActiveRecord::ReadOnlyRecord
end

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

于 2012-10-16T18:53:29.470 回答
-1

研究使用attr_accessible.

于 2012-10-16T18:50:53.173 回答