3

Railsでは、レールが提供する属性を介してdb列にアクセスできますが、これを変更できますか? たとえば、名前の列を持つデータベースがあり、次のようなものを実装できますか。

def name
  "sir" + name
end

試してみましたが、スタックオーバーフローになります。これを実現する方法があります。

さらに質問です。name と self.name に違いはありますか。

4

3 に答える 3

8
def name
  "sir" + read_attribute(:name)
end

ただし、この慣行は避けてください。代わりに、「仮想属性」とも呼ばれる追加のゲッター/セッターを使用してください。詳細については、この回答をお読みください:レールで属性を装飾する

あなたの場合、奇妙な副作用もあります。属性がアクセスされるたびに、名前が追加されます。3回の通話の後、あなたは

"sir sir sir name"

確かに、あなたはすることができます

def name
  n = read_attribute(:name)
  if /^sir/.match(name)
    n
  else
    "sir #{n}"
  end
end

しかし、真剣に、これをしないでください。

于 2009-12-15T11:25:58.613 に答える
2

考えられる合併症を認識しているが、それでもこれを行う必要がある場合は、次のようにします。

def name
  "sir" + self[:name]
end
于 2009-12-15T19:09:00.287 に答える