Форма для конкретного действия с ActiveAdmin

Как я могу создать форму для определенного действия в контроллере ActiveAdmin? Что-то похожее на это:

= form_for @workbook, :url => {:controller => params[:controller], :action =>     "save_workbook_exercise"} do |f|
        = f.hidden_field :exercise_type, :value =>   @user_workbook_exercise.workbook_exercise.exercise_type, :class => "hidden_exercise_type"
        = f.hidden_field :data, :class => "hidden_svg_data"
        = f.hidden_field :user_id, value: @user.id
        = f.hidden_field :workbook_exercise_id, :value => @user_workbook_exercise.workbook_exercise.id, :class => "workbook_exercise_id"
        = f.submit "Save", :onclick => "saveSVG();", :class => "btn btn-primary", :id => "save_button"

За исключением синтаксиса «ActiveAdmin». Я не очень много использовал ActiveAdmin и не смог найти то, что мне было нужно в документации.


person cloudwalker    schedule 11.02.2014    source источник
comment
взгляните на этот gist.github.com/mikeatlas/5628317   -  person Rahul Singh    schedule 11.02.2014
comment
О, классно! Спасибо! Это делает именно то, что я хотел.   -  person cloudwalker    schedule 12.02.2014


Ответы (2)


Если форма отображается тем же контроллером, который будет обрабатывать запрос, вы можете упростить форму.

Пример ресурса Workbook ActiveAdmin:

ActiveAdmin.register Workbook do
  member_action :save_workbook_exercise, :method => :post do
    workbook = resource

    # update workbook using params[:workbook] ...

    workbook.save!
    redirect_to :action => :show
  end
end

И затем ваш шаблон формы:

= semantic_form_for @workbook, :url => { :action => :save_workbook_exercise } do |f|
  = f.hidden_field :exercise_type, :value => @user_workbook_exercise.workbook_exercise.exercise_type, :class => "hidden_exercise_type"
  = f.hidden_field :data, :class => "hidden_svg_data"
  = f.hidden_field :user_id, value: @user.id
  = f.hidden_field :workbook_exercise_id, :value => @user_workbook_exercise.workbook_exercise.id, :class => "workbook_exercise_id"
  = f.actions do
    = f.action :submit, :label => "Save"
person Charles Maresh    schedule 13.02.2014
comment
Это помогло мне. Спасибо :) - person ARK; 26.08.2020
comment
О, и это снова помогло мне определить мои конкретные действия. Я потерялся в синтаксисе: P - person ARK; 26.08.2020

Я работаю с Rails 5 и столкнулся с похожей ситуацией, когда мне нужно настроить атрибут действия формы. Итак, лучший способ, который я нашел для достижения этого, - создать частичную форму в соответствующей папке представления.

Сначала сообщите своему ресурсу, что вы собираетесь использовать пользовательскую форму, поэтому добавьте эту строку в свой файл ресурсов:

# app/admin/organizations.rb

form partial: "form"

Теперь вы можете создать свою часть с помощью компонентов Arbre, как в этом примере:

# app/views/admin/organizations/_form.html.arb

active_admin_form_for [:admin, resource] do |f|
  tabs do
    tab 'General Configuration' do
      f.inputs 'Organization Details' do
        admin_accounts = User.with_role(:admin).order('email ASC')
        site_collection = Site.where("subdomain <> ''").map { |site| ["#{site.subdomain}", site.id ]}
        f.input :name
        f.input :kind, :as => :enum
        f.input :carereceiver_kind, :as => :enum
        f.input :account_manager, :as => :select ,:collection => admin_accounts
        f.input :site_id, as: :select ,collection: site_collection
        f.input :office_phone
        f.input :office_fax
        f.input :office_address
        f.input :company_logo, :as => :file
        f.input :letterhead
        f.input :base_url, label: 'BASE URL'
        f.input :dynamics_url, label: 'DYNAMICS URL'
        f.input :genoa_site_id, label: 'GENOA SITE ID'
      end

      f.inputs 'Organization Settings' do
        f.input :demo_account
        f.input :appointment_not_started_notifications_enabled
        f.input :erx_enabled
        f.input :patients_can_book_appointments
        f.input :new_providers_can_manage_their_own_availability_by_default
        f.input :clarity_enabled
        f.input :whitelist_enabled
        f.input :bed_form_enabled
        f.input :patient_email_required, label: 'Require patient email addresses'
        f.input :patient_credit_card_required, label: 'Require patient credit card information'
        f.input :enable_patient_survey, label: 'Enable patient survey'
        f.input :enable_provider_survey, label: 'Enable provider survey'
        f.input :rcopia4_enabled, label: 'Rcopia 4 enabled'
        f.input :share_notes_across_providers_enabled
        f.input :d2c_mode
        f.input :sso_login_only
        f.input :allow_invited_patients_to_complete_profile
        f.input :allow_overlapping_appointments, as: :select
        f.input :media_mode, :as => :enum
      end

      f.inputs('Organization Contacts', { class: 'organization_contacts_section' }) do
        saved_contacts = f.object.organization_contacts.count
        n = 5 - saved_contacts.to_i
        n.times do
          f.object.organization_contacts.build
        end
        contact_counter = 0
        f.fields_for :organization_contacts do |m|
          contact_counter = contact_counter +  1
          m.inputs "Contact #{contact_counter}" do
            m.input :name, placeholder: 'Name'
            m.input :title, placeholder: 'Title'
            m.input :email, placeholder: 'Email'
            m.input :phone_number, placeholder: 'Phone Number'
          end
        end
      end
    end

    tab 'Appointment Parser Configuration' do
      f.inputs 'Appointment Parser Configuration' do
        f.input :appointment_parsers, as: :select, input_html: { multiple: true }
      end
    end

    tab 'EMR Settings' do
      f.inputs 'Settings' do
        f.input :emr_integrated, label: 'Enable EMR integration'
        f.input :emr_processor_type, as: :select, collection: Organization::AVAILABLE_EMR_PROCESSORS
        f.input :send_to_emr, label: 'Enable integration from 1DW to EMR'
        f.input :receive_from_emr, label: 'Enable integration from EMR to 1DW'
      end
    end

    tab 'Athena EMR Settings' do
      f.inputs 'Settings' do
        f.input :athena_practice_id, label: 'Athena Practice ID', input_html: { disabled: !f.object.has_athena_processor? }
        f.input :athena_department_number, label: 'Athena Department ID', input_html: { disabled: !f.object.has_athena_processor? }
      end
    end
  end

  f.actions
end

Как видите, с помощью admin_organization_path вы можете указать любой другой URL-адрес, но вы также можете настроить method для отправки формы.

Также убедитесь, что вы используете resource для блока active_admin_form_for, потому что вы получите сообщение об ошибке, если попытаетесь использовать что-то вроде @organization.

Форма содержит возможный способ добавления вложенных ресурсов к основному каждый раз, когда вы настроили соответствующие отношения модели.

И с этим он должен работать нормально.

Я надеюсь, что это может быть полезно для кого-то еще.

person alexventuraio    schedule 14.05.2018