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 ユーザーに select ステートメントの実行のみを許可できることを理解しています。また、メソッドがヒットするとすぐに戻るようにレールセッターを書き直すことができると信じています。しかし、すべてに attr_reader を設定しただけでは、ライターはそこにいないだろうと思っていました。

4

2 に答える 2

5

ActiveRecordすべての列に対して読み取り/書き込みを行うゲッター\セッターを自動的に作成します

モデルを読み取り専用にしたい場合は、

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 に答える