私は最初の比較的単純な Ruby on Rails (3.2) アプリケーションを作成しています。アイデアは、電子メールアカウントを管理することです。スキーマはかなり単純です。
t.string "email"
t.string "password"
ActiveRecord モデルは次のように定義されます。
class Mailuser < ActiveRecord::Base
attr_accessible :email, :password
私はすべてのform_for(@mailuser)
と@mailuser.update_attributes(params[:mailuser])
魔法で足場を使用してきました。それはうまくいきます。
ここでの奇妙な点は、ドメイン(例: "example.org") はそのままにしておく必要がある一方で、ユーザーは電子メールのユーザー部分 (例: "foo")のみを編集できるようにする必要があるということです。ただし、電子メールフィールドには完全な電子メール アドレスが含まれます (例: "foo@example.org")。したがって、編集フォームではフィールドを表示しません
- Eメール
- パスワード
むしろ
- ユーザーパート
- パスワード
は(編集可能) +ドメインuserpart
(編集不可)として表示されます。@mailuser.userpart
したがって、次のようにユーザー部分にゲッターとセッターを追加することで解決すると思いました。
class Mailuser < ActiveRecord::Base
attr_accessible :email, :password
# Getter for the user part (left of '@')
def userpart
email.split('@')[0]
end
# Setter for the user part (left of '@')
def userpart=(new_userpart)
email = email.sub(/(.+)@/, new_userpart+"@")
end
実際、@mailuser.userpart
作品はうまくいきます。そして、それは にも適切に表示されますform_for(@mailuser)
。@mailuser.update_attributes(params[:mailuser])
しかし、コントローラーのupdate
メソッドを使用してフォームを保存するときに問題が発生します。Rails は@mailuser
、 を通じて利用可能になった属性からオブジェクトを更新しようとするようですattr_accessible
。ただし、userpart
属性は実際のデータベース フィールドを反映しません。
では、そのようなメソッドを ActiveRecord モデルに追加して機能を追加する適切な方法は何だろうか? 私は Pylons (Python MVC フレームワーク) に慣れており、そのような追加のメソッドをずっと使用することができました。
(実際、データベース スキーマを変更することによってユーザーとドメインの部分を分割することはできません。データベースは他のアプリケーションによって使用されているため、その外観に固執しています。)
前もって感謝します。