2016-07-05 9 views
0

私はルビーフォームオブジェクトxFormを持っています。Formを継承しています。 # DelegationsRailsフォームのオブジェクトファイルで `delegate`とは何ですか?

delegate :id, :xyz, 
     :email, :email=, 
     ... 
     to: :user 

と呼ばれる形式のファイル内のセクションがあり

class xForm < Form 
    # code 
end 

私は前にフォームオブジェクトまたは代表団を扱っていない、とGoogleを検索して情報を見つけることができませんでしたしています。

誰でもハイレベルで使用されていることを説明できますか?

+0

http://stackoverflow.com/questions/20873591/how-rails-delegate-method-works –

答えて

2

デリゲートは、あなたが簡単にあなたの例では、関連するオブジェクト

上の値にアクセスしたい場合は、あなたのフォームがユーザーを持って使用されています。電子メールにアクセスするには、継続してmy_form.user.emailと入力するか、委任を使用することができます(例のように)。my_form.emailと入力するだけで、電子メールをどこから取得するかがわかります。

入力を減らすことができますが、実装の詳細を隠すこともできます。

http://apidock.com/rails/Module/delegate

は、フォームを含むビューで平坦のparams - 構造を構築することができるように一般的に、これは、フォームオブジェクトに使用され、より

をしたい場合はかなりよく、それを説明しています。たとえば、:email:email=の両方を委任した場合は、my_formフォームのフィールド名を:emailとすることができます。コントローラでは、関連付けられたオブジェクトを別々にインスタンス化し、それぞれに固有の属性を渡す代わりにmy_form = MyForm.new(params[:my_form])を使用できます。

+0

2番目の ':email ='は何かを追加するのか、それとも ':email'だけが同じことをするのでしょうか? –

+1

2つの違いは、 ':email ='は慣例による作者であり、 ':email'は読者です。これは、プロパティの値を変更したい場合は、 'my_form.email = 'chris @ so.com''のように書くことができますが、値を読み込むには' my_form .email#()=> 'chris @ so.com'。私は慣習により、他の方法でそれを行うこともできるので、覚えておいてください。 – oreoluwa

+0

@oreoluwaは次のように述べています。これは、あなただけでなく、読者も書くことができます。これは典型的には、ビューのフォームに電子メールフィールドを追加し、フォームに 'form.new(params)'としてパラメータを渡すことができるということです。これを私の答えに加えることができます。 –

関連する問題