2012-02-10 6 views
1

私は、text_fieldの値を上書きするカスタムFormBuilderを持っています。Railsをサブクラス化するネストされたフォームのFormBuilder

class TimesheetFormBuilder < ActionView::Helpers::FormBuilder 
    def text_field(method, opts) 
    #Get a reference to the model object 
    object = @template.instance_variable_get("@#{@object_name}") 

    value = object.send(method) 
    (opts ||= {}).merge!(value: value + '(foo)') 
    super(method, opts) 
    end 
end 

私はネストされたフォームを持っています。タイムシートには多くのワークログがあります

<%= form_for @timesheet, :builder => TimesheetFormBuilder do |timesheet_form| %> 
    <%= timesheet_form.fields_for :worklogs do |worklog_form| %> 
    <%= worklog_form.text_field :monday %> 
    <% end %> 
<% end %> 

問題は、オブジェクトのメソッドを呼び出す方法がわかりません。私は

object = @template.instance_variable_get("@#{@object_name}") 

その後、オブジェクトを取得すると

私はエラーに取得

`@timesheet [worklogs_attributes] [0]」インスタンス変数名があり

として許可されていませんobject_nameを解析する方法ですので、私は@timesheetworklogs0を取得します。

@timesheet.worklogs[0] 

もっと良い方法がありますか?オブジェクト= @ template.instance_variable_get(@object_name): 多くのおかげ

答えて

1

ソリューションは、作業ログのインスタンス

@object.send(method)

+0

あなたはこれを意味するか、テキストフィールドの値である@objectを使用することですか?私が見ることができるようにあなたの最終的なコード行を表示してください。私は同じ正確なエラーメッセージを持っていますが、私はここであなたの答えを理解していません。私たちはすべてでこの行を必要としないようなので、= @ object.send(メソッド) – MattSlay

+0

: オブジェクト= @のtemplate.instance_variable_get( "@を#{@ OBJECT_NAME}") は正しいですか? –

+0

値、それはそう – MattSlay

関連する問題