私は、DBの列の属性のレールのセッターとゲッターを実装することができます
-
19-09-2019 - |
質問
レールでは、私たちが提供する属性レールを通じてDBの列にアクセスすることができますが、我々はこれを変更することができますか? 例えば私はのようなものを実装することができname列でDBています。
def name
"sir" + name
end
私はそれを試してみましたが、それは、スタックオーバーフローを引き起こします。これを実現する方法があります。
より多くの質問は、名前とself.nameの間に違いがあります。
解決
def name
"sir" + read_attribute(:name)
end
しかし、このような行為を避けます。また、「仮想属性」として知られ、代わりに追加のゲッター/セッターを使用してください。 レールの内の属性を飾る:詳細については、この回答を読んでP>
あなたのケースでは、奇妙な副作用もあります。属性にアクセスするたびに、それは名前を追加します。 3回の通話が完了したら、
で終わります"sir sir sir name"
確かに、あなたが行うことができます。
def name
n = read_attribute(:name)
if /^sir/.match(name)
n
else
"sir #{n}"
end
end
しかし、真剣に、これをしない。
他のヒント
あなたは、可能な合併症の認識しているが、それでもこれを行うために必要がある場合:
def name
"sir" + self[:name]
end
所属していません StackOverflow