1

私の使用例は単純です。 dashboard/incomesI display a form to update a record of type というページでIncomeSetting

#income-setting-form
  h4 Income Settings
  p Please set your Income Settings using the form below.

  = render 'income_settings/form'

これにより、このタイプのオブジェクトを編集するためのフォームが生成されます。

= simple_form_for @income_setting do |f|

  = f.hidden_field :user_id

  = f.error_notification

  .form-group
    = f.label :amount
    = f.input_field :amount, required: true, class: 'form-control'
    = f.error :amount, id: 'amount_error'

  = f.association :income_frequency_type, label: 'Frequency:', collection: IncomeFrequencyType.order('id ASC'), include_blank: false, wrapper_html: { class: 'form-group' }, input_html: { class: 'form-control' }

  .form-group
    = f.label :start_date
    = f.input_field :start_date, required: true, as: :string, class: 'form-control datepicker'
    = f.error :start_date, id: 'start_date_error'

  = f.association :savings_rate_type, label: 'Savings Rate:', collection: SavingsRateType.order('name ASC'), include_blank: false, wrapper_html: { class: 'form-group' }, input_html: { class: 'form-control' }

  .form-group
    = f.label :description
    = f.input_field :description, required: true, class: 'form-control'
    = f.error :description, id: 'amount_error'

  button.btn.btn-primary.btn-block type='submit' Save

RESTful で保守しやすいものにするために、IncomeSettingオブジェクトに対するすべてのアクションをincome_settings_controller.rbファイルに保存することにしました。

  def update
    if @income_setting.update(income_setting_params)
      redirect_to dashboard_income_path, notice: 'Your Income Setting was saved successfully updated.'
    else
      redirect_to controller: 'dashboard', action: 'income'
    end
  end

検証が失敗した場所がわかりますか?ダッシュボードにリダイレクトしますか? @income_setting そこにブレークポイントを配置すると、モデルに検証エラーがあることがわかりますが、コントローラーがリダイレクトするのと同じように、モデル エラーは失われますか?

が呼び出されるまでに実際に表示されるように、これらのエラーを永続化する方法に関する提案はrender 'income_settings/formありますか?

4

1 に答える 1

2

dashboard/incomeエラー状態でリダイレクトする代わりにレンダリングする必要があります。フォーム リクエストを別のコントローラーに送信しているため、そのページをレンダリングするためのセットアップ ロジックを繰り返し/共有する必要がある場合があります。

def update
  if @income_setting.update(income_setting_params)
    redirect_to dashboard_income_path, notice: 'Your Income Setting was saved successfully updated.'
  else
    # additional setup may be necessary
    render 'dashboard/income'
  end
end
于 2013-11-04T04:00:45.240 に答える