Railsのモデルプロパティにアクセスする

model ruby ruby-on-rails

だから基本的に私はコントローラを持っています。 このようなもの

def show @user = User.find [:params [id]]#ビューの最後に表示するコード

ユーザーは名前、住所、性別などのプロパティを持っています モデル内でこれらのプロパティにアクセスする方法 たとえば、モデルアクセサーを名前でオーバーロードして、自分の値で置き換えるか、何かを連結することはできますか。 このメソッドのshow.html.erbビューのように、私はユーザーの名前を ‘Mr.’と連結することができます。または「夫人」性別に応じて? どうすれば可能ですか?

  6  2


ベストアンサー

属性を上書きすることを躊躇し、代わりにこのようにモデルに追加します。

def title_name "#{title}#{name}" end

しかし、このように直接フィールドにアクセスすることができます。

def name "#{title}#{self [:name]}" end

9


これらの構造を表すためにモデル内に仮想属性を作成できます。

この主題に関しては railscastがありますが、要約すれば、あなたのモデルの中でこのようなことをすることができます。

def full_name [first_name、last_name] .join( '')end

def full_name =(名前)split = name.split( ''、2)self.first_name = split.first self.last_name = split.last end

読み書き時に属性の値を明示的に変更したい場合は、read_attributeメソッドまたはwrite_attributeメソッドを使用できます。 (私はこれらが廃止されるかもしれないと思いますが)。

これらは、属性のアクセサメソッドを自分のものに置き換えることで機能します。 例として、ブランチIDフィールドは、xxxxxxまたはxx-xx-xxのいずれかとして入力できます。 そのため、データがデータベースに格納されたときに、branch_identifier =メソッドを変更してハイフンを削除できます。 これは次のようにして達成できます。

value.blankを除き、def branch_identifier =(value)write_attribute(:branch_identifier、value.gsub(/  -  /、 '')) 終わり

5


あなたが提案するようにあなたは簡単に属性をオーバーロードすることができます。

すなわち nameがusersデータベーステーブルのフィールドの場合は、次の操作を実行できます。

def name "#{title}#{read_attribute [:name]}" end

`read_attribute`関数はフィールドのデータベースカラム値を返します。

警告:これが良い考えかどうかはわかりません。 モデルデータを修正された方法で表示するメソッドが必要な場合は、デフォルトのメソッドをオーバーロードしないようにして、別のメソッドを呼び出すことをお勧めします – ある程度の難読化は避けられます。

ここにドキュメント:http://api.rubyonrails.org/classes/ActiveRecord/Base.html( ‘デフォルトのアクセサの上書き’にあります)

0


データベースに直接保存されているデータにアクセスしている場合は、ビューでこれを実行できます。

<%= @ user.firstname%> <%= @ user.gender%>

データのカスタム表現を作成する必要がある場合は、ヘルパーを作成するか、モデルを拡張する必要があります(上記のとおり)。

0


私はそのようなことのためにモデルに追加されたヘルパーメソッドを使う傾向があります:

def format_name "#{title}#{first_name}#{last_name}" end

(前の投稿を編集 私のコードを振り返ってみると、ヘルパーはプレゼンテーション関連(マークアップ)のものに限られていることがわかりました。)

(残ったパラメータを削除するには、もう一度編集してください…​ そうねえ、今朝はコーヒーが足りない。

($を#に置き換えるようにもう一度編集してください…​ たぶん私はこれを削除する必要がありますね))

0


検索する

デフォルトのアクセサを上書きする

-1


タイトルとURLをコピーしました