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
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.
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.
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 ;-)