【问题标题】:render form partials in rails activeadmin without using formtastic forms在 rails activeadmin 中渲染表单部分而不使用 formtastic 表单
【发布时间】:2018-12-07 05:28:06
【问题描述】:

我的 clubs.rb 文件如下:

ActiveAdmin.register Club do
    permit_params :name, :email, :admin_id, club_profile_attributes: [:id, :club_id, :address_1, :address_2, :city, :state, :country_id, :lat, :long, :website, :email, :fiscal_number, :phone_number_1, :phone_number_2]
    before_save do |club|
        if user_id = User.find_by_email(params[:club][:email]).try(:id)
            club.admin_id = user_id
        else
            user = User.set_email params[:club][:email]
            club.admin_id = user.id
        end
        club.id = club.club_profile.club_id
    end

    form do |f|
        f.inputs "Details" do
        f.semantic_errors *f.object.errors.keys
        #club name
        f.input :name, label: 'Club Name'
        #search for user email field
        f.input :email, label: 'Club Admin Email', input_html: {value: 
        f.object.admin.present? ? f.object.admin.email : ''}
        #club profile and country for form
        f.inputs for: [:club_profile, f.object.club_profile ||   ClubProfile.new] do |ff|
            ff.input :address_1
            ff.input :address_2
            ff.input :city
            ff.input :state
            ff.input :country_id, as: :select, collection: Country.all.collect {|country| [ country.name, country.id]}, include_blank: false
            ff.input :lat
            ff.input :long
            ff.input :website
            #Club email
            ff.input :email, label: 'Club Email'
            ff.input :fiscal_number
            ff.input :phone_number_1
            ff.input :phone_number_2
        end
        f.actions
        end
    end

show do
    attributes_table do
        row "Club Admin Email" do
            club.admin.email
        end
        attributes_table_for club.club_profile do
            row :address_1
            row :address_2
            row :city
            row :state
            row "Country" do
                club.club_profile.country.name
            end
            row :lat
            row :long
            row :website
            row "Club Email" do
                club.club_profile.email
            end
            row :fiscal_number
            row :phone_number_1
            row :phone_number_2
        end
    end
end
end

请帮助我如何使用部分,以便我可以在 activeadmin 的仪表板中使用相同的部分。 在上面的代码中,我编写了在活动管理员中创建新俱乐部的表单,显示代码用于显示俱乐部的详细信息。

【问题讨论】:

  • 我有点不清楚你在这里要求什么。您想将此表单移动到部分,但您不想使用 formtastic?还是那有关系。是否有任何解决方案可以让您与仪表板共享此表单?
  • 是的,我想在活动管理员中制作一个部分表单,我可以在资源的索引操作和仪表板中使用它。您推荐的最佳解决方案是什么? @AmielMartin
  • 我认为您应该可以部分使用active_admin_form_for。我会写一个答案。

标签: javascript ruby-on-rails ruby activeadmin


【解决方案1】:

我的建议是使用带有.html.arb 扩展和active_admin_form_for 助手的部分。

您可以将您的表单放在一个部分中。您甚至可以使用部分.arb 而不是.erb.arb 扩展允许您在部分中使用 ActiveAdmin DSL 编写。

# app/views/clubs/_form.html.arb
active_admin_form_for resource do |f|
  f.inputs "Details" do
    f.semantic_errors *f.object.errors.keys
    #club name
    f.input :name, label: 'Club Name'
  end

  # etc

  f.actions
end

然后,在您的仪表板中,或者您想要呈现您可以使用的表单的其他任何地方

# app/admin/dashboard.rb
render partial: 'clubs/form', locals: { resource: Club.new }

# app/admin/clubs.rb
form partial: 'form'

【讨论】:

  • 我已经实现了你的解决方案,但它给出了未定义的方法'
  • 嗯。如果没有回溯,很难对未定义的方法错误进行故障排除。你能追踪到那个未定义的方法错误是从哪里来的吗?
  • 我按照您的建议通过跟踪找到了解决方案,我的错误与我最终能够解决的助手有关。
猜你喜欢
  • 1970-01-01
  • 2018-10-16
  • 2016-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多