# Alchemy::Custom::Model [WIP] Short description and motivation. ## Usage How to use my plugin. ## Installation Add this line to your application's Gemfile: ```ruby gem 'alchemy-custom-model' ``` And then execute: ```bash $ bundle ``` Or install it yourself as: ```bash $ gem install alchemy-custom-model ``` Then run the installer ```bash bin/rails alchemy_custom_model:install ``` ## Usage * Generate your model * remember to append a column for language: ```ruby t.integer :language_id ``` * if this model would have a custom url and the relative layout, go to the [friendly_id page](https://github.com/norman/friendly_id) to make the correct install * we can define on the model this attributes to be used for page SEO: * text :meta_description * text :meta_keywords * string :meta_title * boolean :robot_follow * boolean :robot_index * include the model decorator ```ruby include Alchemy::Custom::Model::ModelDecoration ``` * attach yours belongs_to relations to alchemy_elements ```ruby # For attachments, the foreign_key is the key defined in the model, can be omitted if it's standard Rails naming belongs_to :file, class_name: "Alchemy::Attachment", optional: true, foreign_key: :file_id global_id_setter :file # For Pictures belongs_to :picture, class_name: 'Alchemy::Picture', optional: true, touch: true global_id_setter :picture ``` * Generate your controller: ```ruby bin/rails g controller Admin::Posts ``` * inherit from Alchemy::Custom::Model::Admin::BaseController * Create the routes (prepend it to alchemy routes and alchemy_custom_model routes) * Build the ability for your recipe: ```ruby class PostAbility include CanCan::Ability def initialize(user) if user.present? && (user.is_admin? or user.has_role?("editor")) can :manage, Post #model can :manage, :admin_posts #routes to the posts withouth _path end end end ``` * build the abilities in ad initializer Es: "menu_and_abilities.rb" ```ruby Alchemy::Modules.register_module({ name: 'Posts', # custom name order: 2, navigation: { name: 'modules.posts', controller: '/admin/posts', #controller path action: 'index', #action icon: "question" # custom icon } }) Alchemy.register_ability(PostAbility) ``` * Costruisci la form per il modello ```ruby <%= base_form_container do %>