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

attr_accessor usage for a custom attribute of ActiveModel


I need to implement a form with a custom field (which doesn't have it's reference in db) using a checkbox (boolean field).

if the checkbox is checked, the backend must write a certain many-to-many row and point it to the updated object.

The problem is my setter method in article.rb is not being accessed on form post.

article.rb

class Article < ActiveRecord::Base
  attr_accessor :highlight

  def highlight
  end

  def highlight=(arg)
    puts "NO ACCESS"
  end
end

_form.html.erb

<%= semantic_form_for [:admin, @article] do |f| %>
  <%= f.input :title, :label => "Title" %>
  <%= f.input :text, :as => :ckeditor %>
  <%= f.input :highlight, :as => :boolean, :label => "Highlight" %>

article.rb(active_admin)

ActiveAdmin.register Article do
  form partial: 'form'
  permit_params do
    permitted = [:title, :text, :highlight]
    permitted
  end
end

Solution

  • Javkhlan, attr_accessor :highlight is short form for

    def highlight
      @hightlight
    end
    
    def highlight=(highlight)
      @highlight = highlight
    end
    

    So, your code

    def highlight
    end
    
    def highlight=(arg)
      puts "NO ACCESS"
    end
    

    Just rewrite methods generated by your attr_accessor. Try to remove these two methods and you'll be happy