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
を解析する方法ですので、私は@timesheet
とworklogs
と0
を取得します。
@timesheet.worklogs[0]
もっと良い方法がありますか?オブジェクト= @ template.instance_variable_get(@object_name): 多くのおかげ
は
あなたはこれを意味するか、テキストフィールドの値である
@object
を使用することですか?私が見ることができるようにあなたの最終的なコード行を表示してください。私は同じ正確なエラーメッセージを持っていますが、私はここであなたの答えを理解していません。私たちはすべてでこの行を必要としないようなので、= @ object.send(メソッド) – MattSlay: オブジェクト= @のtemplate.instance_variable_get( "@を#{@ OBJECT_NAME}") は正しいですか? –
値、それはそう – MattSlay