私は、DBの列の属性のレールのセッターとゲッターを実装することができます

StackOverflow https://stackoverflow.com/questions/1906702

  •  19-09-2019
  •  | 
  •  

質問

レールでは、私たちが提供する属性レールを通じてDBの列にアクセスすることができますが、我々はこれを変更することができますか? 例えば私はのようなものを実装することができname列でDBています。

def name
  "sir" + name
end

私はそれを試してみましたが、それは、スタックオーバーフローを引き起こします。これを実現する方法があります。

より多くの質問は、名前とself.nameの間に違いがあります。

役に立ちましたか?

解決

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

しかし、真剣に、これをしない。

他のヒント

あなたは、可能な合併症の認識しているが、それでもこれを行うために必要がある場合:

def name
  "sir" + self[:name]
end
scroll top