Search code examples
ruby-on-railsrubyruby-on-rails-4activeadminformtastic

Edit form checkbox, radio and trix editor not getting pre-populated in ActiveAdmin


I have a form which has checkboxes, trix editor, radio button and text fields. When I edit the record in admin interface, form is shown with all text fields. Am not able to see trix editor, checkboxes and radio buttons.

I know as: :radio and as: :check_boxes and as: :trix_editor should work but they are not getting pre populated with already saved values

Here is my jobposting.rb file.

Any help will be really appreciated.

form do |f|
    f.inputs "New Job Posting" do
      f.input :title
      f.input :description, as: :trix_editor
      f.input :how_to_apply, as: :trix_editor
      f.input :job_type, as: :radio
      f.input :city
      f.input :user_id
      f.input :categories, as: :check_boxes

      f.input :publish


    end
    f.actions
  end

and the form appears like this

enter image description here

Its not showing the fields(description, how to apply) which should have trix editor. For radio(Job Type) and check box(Categories) fields its showing simple yes and no..where as the actual values for these fields are theseenter image description here

EDITED

Started GET "/admin/job_postings/3/edit" for ::1 at 2017-02-11 12:41:22 +0530
Processing by Admin::JobPostingsController#edit as HTML
  Parameters: {"id"=>"3"}
  AdminUser Load (0.4ms)  SELECT  "admin_users".* FROM "admin_users" WHERE "admin_users"."id" = $1  ORDER BY "admin_users"."id" ASC LIMIT 1  [["id", 1]]
  JobPosting Load (0.3ms)  SELECT  "job_postings".* FROM "job_postings" WHERE "job_postings"."id" = $1 LIMIT 1  [["id", 3]]
  CACHE (0.0ms)  SELECT  "job_postings".* FROM "job_postings" WHERE "job_postings"."id" = $1 LIMIT 1  [["id", "3"]]
  Rendered /Users/KrishnaTeja/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/bundler/gems/activeadmin-2bb5021f81c2/app/views/active_admin/resource/edit.html.arb (270.1ms)
Completed 500 Internal Server Error in 367ms (ActiveRecord: 7.4ms)

ActionView::Template::Error (undefined method `categories' for #<Class:0x007ffdd084e420>):
    1: insert_tag renderer_for(:edit)
  app/admin/job_postings.rb:26:in `block (3 levels) in <top (required)>'
  app/admin/job_postings.rb:18:in `block (2 levels) in <top (required)>'


  Rendered /Users/KrishnaTeja/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/actionpack-4.2.7.1/lib/action_dispatch/middleware/templates/rescues/_source.erb (16.6ms)
  Rendered /Users/KrishnaTeja/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/actionpack-4.2.7.1/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (7.9ms)
  Rendered /Users/KrishnaTeja/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/actionpack-4.2.7.1/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (1.8ms)
  Rendered /Users/KrishnaTeja/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/actionpack-4.2.7.1/lib/action_dispatch/middleware/templates/rescues/template_error.html.erb within rescues/layout (115.2ms)

enter image description hereenter image description here

This is my views/job_postings/_form.html.erb if you check the categories field its not coming from any table am having an array and iterating through it.

<%= form_for @job_posting do |f| %>
<% if @job_posting.errors.any? %>
        <div id="errors">
            <h2><%= pluralize(@job_posting.errors.count, "error") %> prevented this post from saving:</h2>
            <ul>
                <% @job_posting.errors.full_messages.each do |msg| %>
                    <li><%= msg %></li>
                <% end %>
            </ul>
        </div>
    <% end %>

<p>
    <%= f.label :title %>
    <%= f.text_field :title %>
</p>

<p>
    <%= f.label :description %>

   <%= f.trix_editor :description %>

</p>
<p>
    <%= f.label :how_to_apply %>
    <%= f.trix_editor :how_to_apply %>
</p>
<p>
    <%= f.label :categories %>

    <% [ 'Front End', 'Back End', 'Others'].each do |category| %>
      <%= label_tag "job_posting_categories_#{category}", category %>

      <%= check_box_tag "job_posting[categories][]", category, checked(category), id: "job_posting_categories_#{category}" %> 


    <% end %>

</p>
<p>
    <%= f.label :job_type %>
    <% [ 'FullTime', 'Contract', 'PartTime', 'Freelance', 'Intern'].each do |job_type| %>
         <%= f.radio_button 'job_type', job_type %>
          <%= job_type.humanize %>
    <% end %>

</p>
<p>
    <%= f.label :city %>
    <%= f.text_field :city %>
</p>
    <%= f.submit "Post Job" %>


<% end %>

Solution

  • Solved

    ActiveAdmin.register JobPosting do
    
    # See permitted parameters documentation:
    # https://github.com/activeadmin/activeadmin/blob/master/docs/2-resource-customization.md#setting-up-strong-parameters
    #
    permit_params :title, :description,:how_to_apply, :job_type ,:city,:user_id,{ categories: []}, :publish
    #
    # or
    #
    # permit_params do
    #   permitted = [:permitted, :attributes]
    #   permitted << :other if params[:action] == 'create' && current_user.admin?
    #   permitted
    # end
    
    
    form do |f|
        inputs "New Job Posting" do
    
          input :title
          input :description
          input :how_to_apply
          input :job_type, as: :radio, collection: [ 'FullTime', 'Contract', 'PartTime', 'Freelance', 'Intern']
          input :city
          input :user, member_label: :email
          input :categories, as: :check_boxes, collection: ['Front End','Back End','Others'].map { |e| [e, e,{checked: f.object.categories.include?(e)}] }
    
          input :publish
    
    
        end
        actions
      end
    
    
    end