Wolfgang Barth PRO
Joined 11/5/2017
Wolfgang Barth PRO said over 6 years ago on Virtual Columns with JSON Data Types :

t.json doesn't work for me with rails 5.1.4, mysql2 0.4.10, and mariadb 10.2.10. I tried

 def change
    add_column :org_units, :ou_logo, :json
  end

after migration, schema.rb results in t.text:

    t.text "ou_logo", limit: 4294967295, collation: "utf8mb4_bin"

I expected t.json. Any ideas?

Wolfgang


Wolfgang Barth PRO said over 6 years ago on Virtual Columns with JSON Data Types :

Thank you for the link. Mysql and JSON seems to be a trap for me. Most linux distributions migrate mysql to mariadb these days. Migrate data to mariadb needs an explicit dump and restore of the related tables or you change the type back to t.text in mysql.

I will go back use t.text an serialize for now.


Wolfgang Barth PRO said over 6 years ago on Polymorphic Associations :

I like it, routing via :modules is very elegant. It works for me in a normal rails application, but i can't get it work inside of a rails engine.

config/routes.rb from the engine:

Wobauth::Engine.routes.draw do
  resources :users do
    resources :authorities, module: :users
  end
end

Controllers:

module Wobauth
  class Users::AuthoritiesController < AuthoritiesController ...
  end
end
module Wobauth
  class AuthoritiesController < ApplicationController
   ...
  end
end

I get the following error:

uninitialized constant Authority
Extracted source (around line #269):
      names.inject(Object) do |constant, name|
        if constant == Object
          constant.const_get(name)
        else
          candidate = constant.const_get(name)
          next candidate if constant.const_defined?(name, false)

It works without specifying :modules, but this means i must place the logic in the main authorities_controller ... so its less elegant. Any idea?

Wolfgang.


Wolfgang Barth PRO said over 6 years ago on Polymorphic Associations :

Yeah, found it. The problem comes from cancancan/lib/cancan/controller_resource.rb in 


    def resource_class
      case @options[:class]
      when false
        name.to_sym
      when nil
        namespaced_name.to_s.camelize.constantize
      when String
        @options[:class].constantize
      else
        @options[:class]
      end
    end

The error cames from namespaced_name.to_s.camelize.constantize, which resolves to "Authority". I now set

module Wobauth
  class AuthoritiesController < ApplicationController
    skip_load_and_authorize_resource
    load_and_authorize_resource class: Wobauth::Authority ...

This sets the class name manually. Seems to work now. Thank you for the idea ;-)


Wolfgang Barth PRO said over 2 years ago on Hotwire Modals :
Yeah, I love this idea: render the complete modal via turbo_stream and then use connect() to auto-open the modal. I will give it a try.