#マニフェスト @models = { folder: { associations: { belongs_to: { }, has_many: { }, }, attributes: { name: { type: 'text', rules : { required: true, } }, controller_name: { type: 'text', rules : { } }, action_name: { type: 'text', rules : { } }, category_id: { type: 'number', }, t: { type: 'number', rules : { required: true, number: true, }, }, parent_id: { type: 'number', rules : { required: true, number: true, }, }, lft: { type: 'number', rules : { required: true, number: true, }, }, rgt: { type: 'number', rules : { required: true, number: true, }, }, depth: { type: 'number', rules : { required: true, number: true, }, }, }, }, scroll: { associations: { belongs_to: { author: { }, }, has_many: { scroll_panels: { }, panels: { through: 'scroll_panels', }, }, }, attributes: { title: { type: 'text', rules : { required: true, } }, description: { type: 'text', rules : { } }, visible: { type: 'number', rules : { required: true, number: true, }, source: { type: 'magic_number', args: { select_item_name: 'scroll_visible_items', }, }, }, author_id: { type: 'number', rules : { required: true, number: true, }, }, }, }, scroll_panel: { associations: { belongs_to: { panel: { }, scroll: { }, }, has_many: { }, }, attributes: { scroll_id: { type: 'number', rules : { required: true, number: true, } }, panel_id: { type: 'number', rules : { required: true, number: true, } }, t: { type: 'number', rules : { required: true, number: true, min: 0, } }, author_id: { type: 'number', rules : { required: true, number: true, } }, }, }, comic: { associations: { belongs_to: { author: { }, }, has_many: { comic_stories: { }, stories: { through: 'comic_stories', }, }, }, attributes: { title: { type: 'text', rules : { required: true, } }, description: { type: 'text', rules : { } }, visible: { type: 'number', rules : { required: true, number: true, }, source: { type: 'magic_number', args: { select_item_name: 'comic_visible_items', }, }, }, author_id: { type: 'number', rules : { required: true, number: true, } }, }, }, comic_story: { associations: { belongs_to: { comic: { }, story: { }, }, has_many: { }, }, attributes: { comic_id: { type: 'number', rules : { required: true, number: true, } }, story_id: { type: 'number', rules : { required: true, number: true, } }, t: { type: 'number', rules : { required: true, number: true, min: 0, } }, author_id: { type: 'number', rules : { required: true, number: true, } }, }, }, story: { associations: { belongs_to: { }, has_many: { comic_stories: { }, comics: { through: 'comic_stories', }, story_sheets: { }, sheets: { through: 'story_sheets', }, }, }, attributes: { title: { type: 'text', rules : { } }, description: { type: 'text', rules : { } }, t: { type: 'number', rules : { required: true, number: true, min: 0, } }, visible: { type: 'number', rules : { required: true, number: true, }, source: { type: 'magic_number', args: { select_item_name: 'story_visible_items', }, }, }, author_id: { type: 'number', rules : { required: true, number: true, } }, }, }, story_sheet: { associations: { belongs_to: { story: { }, sheet: { }, }, has_many: { }, }, attributes: { story_id: { type: 'number', rules : { number: true, } }, sheet_id: { type: 'number', rules : { number: true, } }, t: { type: 'number', rules : { required: true, number: true, min: 0, } }, author_id: { type: 'number', rules : { required: true, number: true, } }, }, }, sheet: { associations: { belongs_to: { author: { }, }, has_many: { story_sheets: { }, stories: { through: 'story_sheets', }, sheet_panels: { }, panels: { through: 'sheet_panels', }, }, }, attributes: { caption: { type: 'text', rules : { } }, width: { type: 'number', rules : { required: true, number: true, } }, height: { type: 'number', rules : { required: true, number: true, } }, visible: { type: 'number', rules : { required: true, number: true, }, source: { type: 'magic_number', args: { select_item_name: 'sheet_visible_items', }, }, }, author_id: { type: 'number', rules : { required: true, number: true, } }, }, }, sheet_panel: { associations: { belongs_to: { sheet: { }, panel: { }, }, has_many: { }, }, attributes: { sheet_id: { type: 'number', rules : { number: true, } }, panel_id: { type: 'number', rules : { number: true, } }, x: { type: 'number', rules : { required: true, number: true, } }, y: { type: 'number', rules : { required: true, number: true, } }, z: { type: 'number', rules : { required: true, number: true, min: 1, } }, t: { type: 'number', rules : { required: true, number: true, min: 0, } }, author_id: { type: 'number', rules : { number: true, } }, }, }, panel: { associations: { belongs_to: { author: { }, }, has_many: { scroll_panels: { }, scrolls: { through: 'scroll_panels', }, sheet_panels: { }, sheets: { through: 'sheet_panels', }, panel_pictures: { }, speech_balloons: { }, ground_pictures: { }, ground_colors: { }, }, }, attributes: { width: { type: 'number', rules : { required: true, number: true, min: 1, } }, height: { type: 'number', rules : { required: true, number: true, min: 1, } }, border: { type: 'number', rules : { required: true, number: true, min: 0, } }, caption: { type: 'text', rules : { } }, publish: { type: 'number', rules : { required: true, number: true, }, source: { type: 'magic_number', args: { select_item_name: 'panel_visible_items', }, }, }, author_id: { type: 'number', rules : { required: true, number: true, } }, }, }, panel_picture: { associations: { belongs_to: { panel: { }, }, has_many: { }, }, attributes: { panel_id: { type: 'number', rules : { number: true, } }, picture_id: { type: 'number', rules : { required: true, number: true, } }, caption: { type: 'text', rules : { } }, x: { type: 'number', rules : { required: true, number: true, } }, y: { type: 'number', rules : { required: true, number: true, } }, width: { type: 'number', rules : { required: true, number: true, } }, height: { type: 'number', rules : { required: true, number: true, } }, link: { type: 'text', rules : { url: true, } }, z: { type: 'number', rules : { required: true, number: true, min: 1, } }, t: { type: 'number', rules : { required: true, number: true, min: 0, } }, }, }, speech_balloon: { associations: { belongs_to: { panel: { }, speech_balloon_template: { }, }, has_many: { }, has_one: { balloon: { }, speech: { }, }, }, attributes: { panel_id: { type: 'number', rules : { number: true, } }, speech_balloon_template_id: { type: 'number', rules : { required: true, number: true, } }, speech_balloon_template_module_name: { type: 'text', rules : { required: true, } }, z: { type: 'number', rules : { required: true, number: true, min: 1, } }, t: { type: 'number', rules : { required: true, number: true, min: 0, } }, speech_balloon_template_settings: { type: 'text', rules : { } }, caption: { type: 'text', rules : { } }, }, }, balloon: { associations: { belongs_to: { speech_balloon: { }, system_picture: { }, speech_balloon_template: { }, }, has_many: { }, }, attributes: { speech_balloon_id: { type: 'number', rules : { number: true, } }, speech_balloon_template_id: { type: 'number', rules : { required: true, number: true, } }, speech_balloon_template_module_name: { type: 'text', rules : { required: true, } }, system_picture_id: { type: 'number', rules : { required: true, number: true, } }, x: { type: 'number', rules : { required: true, number: true, } }, y: { type: 'number', rules : { required: true, number: true, } }, width: { type: 'number', rules : { required: true, number: true, min: 1, } }, height: { type: 'number', rules : { required: true, number: true, min: 1, } }, r: { type: 'number', rules : { required: true, number: true, } }, speech_balloon_template_settings: { type: 'text', rules : { } }, }, }, speech: { associations: { belongs_to: { speech_balloon: { }, writing_format: { }, speech_balloon_template: { }, }, has_many: { }, }, attributes: { speech_balloon_id: { type: 'number', rules : { number: true, } }, speech_balloon_template_id: { type: 'number', rules : { required: true, number: true, } }, speech_balloon_template_module_name: { type: 'text', rules : { required: true, } }, writing_format_id: { type: 'number', source: { type: 'model', }, rules : { required: true, number: true, } }, writing_format_module_name: { type: 'text', rules : { required: true, } }, content: { type: 'text', rules : { } }, font_size: { type: 'float', rules : { required: true, number: true, min: 0, }, source: { type: 'magic_number', args: { select_item_name: 'speech_font_size_items', }, }, }, text_align: { type: 'number', rules : { required: true, number: true, range: [0, 3], }, source: { type: 'magic_number', args: { select_item_name: 'speech_text_align_items', }, }, }, fore_color: { type: 'number', rules : { required: true, number: true, range: [0, 0xffffff], } }, x: { type: 'number', rules : { required: true, number: true, } }, y: { type: 'number', rules : { required: true, number: true, } }, width: { type: 'number', rules : { required: true, number: true, min: 1, } }, height: { type: 'number', rules : { required: true, number: true, min: 1, } }, quotes: { type: 'text', rules : { } }, speech_balloon_template_settings: { type: 'text', rules : { } }, writing_format_settings: { type: 'text', rules : { } }, }, }, ground_picture: { associations: { belongs_to: { panel: { }, }, has_many: { }, }, attributes: { panel_id: { type: 'number', rules : { number: true, } }, picture_id: { type: 'number', rules : { required: true, number: true, } }, caption: { type: 'text', rules : { } }, repeat: { type: 'number', rules : { required: true, number: true, range: [0, 3], }, source: { type: 'magic_number', args: { select_item_name: 'ground_picture_repeat_items', }, }, }, x: { type: 'number', rules : { required: true, number: true, } }, y: { type: 'number', rules : { required: true, number: true, } }, z: { type: 'number', rules : { required: true, number: true, min: 1, } }, t: { type: 'number', rules : { required: true, number: true, min: 0, } }, }, }, ground_color: { associations: { belongs_to: { panel: { }, }, has_many: { }, }, attributes: { panel_id: { type: 'number', rules : { number: true, } }, caption: { type: 'text', rules : { } }, code: { type: 'number', rules : { required: true, number: true, range: [0, 0xffffff], } }, orientation: { type: 'number', rules : { required: true, number: true, range: [0, 1], }, source: { type: 'magic_number', args: { select_item_name: 'ground_color_orientation_items', }, }, }, xy: { type: 'number', rules : { number: true, } }, wh: { type: 'number', rules : { number: true, } }, z: { type: 'number', rules : { required: true, number: true, min: 1, } }, t: { type: 'number', rules : { required: true, number: true, min: 0, } }, }, }, original_picture: { associations: { belongs_to: { artist: { }, }, has_many: { pictures: { }, }, has_one: { resource_picture: { }, }, }, attributes: { ext: { type: 'text', rules : { required: true, } }, width: { type: 'number', rules : { required: true, number: true, } }, height: { type: 'number', rules : { required: true, number: true, } }, filesize: { type: 'number', rules : { required: true, number: true, } }, artist_id: { type: 'number', rules : { required: true, number: true, } }, md5: { type: 'text', rules : { required: true, required: true, } }, uploaded_at: { type: 'datetime', }, published_at: { type: 'datetime', }, stopped_at: { type: 'datetime', }, }, }, picture: { associations: { belongs_to: { license: { }, artist: { }, system_picture: { }, }, has_many: { }, has_one: { }, }, attributes: { original_picture_id: { type: 'number', rules : { required: true, number: true, } }, revision: { type: 'number', rules : { required: true, number: true, } }, ext: { type: 'text', rules : { required: true, } }, width: { type: 'number', rules : { required: true, number: true, } }, height: { type: 'number', rules : { required: true, number: true, } }, filesize: { type: 'number', rules : { required: true, number: true, } }, artist_id: { type: 'number', rules : { required: true, number: true, } }, license_id: { type: 'number', rules : { required: true, number: true, } }, md5: { type: 'text', rules : { required: true, } }, system_picture_id: { type: 'number', rules : { required: true, number: true, } }, license_group_settings: { type: 'text', rules : { } }, credit_picture_settings: { type: 'text', rules : { } }, license_settings: { type: 'text', rules : { } }, license_group_module_name: { type: 'text', rules : { required: true, } }, } }, resource_picture: { associations: { belongs_to: { original_picture: { }, license_group: { }, license: { }, artist: { }, system_picture: { }, }, has_many: { }, has_one: { }, }, attributes: { original_picture_id: { type: 'number', rules : { required: true, number: true, } }, ext: { type: 'text', rules : { required: true, } }, width: { type: 'number', rules : { required: true, number: true, } }, height: { type: 'number', rules : { required: true, number: true, } }, filesize: { type: 'number', rules : { required: true, number: true, } }, artist_id: { type: 'number', rules : { required: true, number: true, } }, license_group_id: { type: 'number', rules : { required: true, number: true, } }, license_id: { type: 'number', rules : { required: true, number: true, } }, md5: { type: 'text', rules : { required: true, } }, system_picture_id: { type: 'number', rules : { required: true, number: true, } }, license_group_id: { type: 'number', rules : { required: true, number: true, } }, license_group_settings: { type: 'text', rules : { } }, credit_picture_settings: { type: 'text', rules : { } }, license_settings: { type: 'text', rules : { } }, picture_id: { type: 'number', rules : { required: true, number: true, } }, license_group_module_name: { type: 'text', rules : { required: true, } }, }, }, original_picture_license_group: { associations: { belongs_to: { original_picture: { }, license_group: { }, }, has_many: { }, has_one: { }, }, attributes: { original_picture_id: { type: 'number', rules : { required: true, number: true, } }, license_group_id: { type: 'number', rules : { required: true, number: true, } source: { type: 'model', }, }, }, }, original_picture_license: { associations: { belongs_to: { original_picture: { }, license: { }, system_picture: { }, }, has_many: { }, has_one: { }, }, attributes: { original_picture_id: { type: 'number', rules : { required: true, number: true, } }, license_group_id: { type: 'number', source: { type: 'model', }, rules : { required: true, number: true, } }, license_id: { type: 'number', source: { type: 'filter', args: { resource_list_name: 'by_license_group', filter_column_name: 'license_group_id', }, }, rules : { required: true, number: true, } }, license_settings: { type: 'text', rules : { } }, license_group_module_name: { type: 'text', rules : { required: true, } }, }, }, speech_balloon_template: { associations: { belongs_to: { system_picture: { }, }, has_many: { speech_balloons: { }, panels: { through: 'speech_balloons', }, }, has_one: { }, }, attributes: { name: { type: 'text', rules : { required: true, } }, module_name: { type: 'text', rules : { required: true, } }, caption: { type: 'text', rules : { required: true, } }, t: { type: 'number', rules : { required: true, number: true, min: 0, } }, system_picture_id: { type: 'number', rules : { required: true, number: true, } }, settings: { type: 'text', rules : { required: true, } }, }, }, writing_format: { associations: { belongs_to: { system_picture: { }, }, has_many: { speeches: { }, }, has_one: { }, }, attributes: { name: { type: 'text', rules : { required: true, } }, module_name: { type: 'text', rules : { required: true, } }, caption: { type: 'text', rules : { required: true, } }, system_picture_id: { type: 'number', rules : { required: true, number: true, } }, settings: { type: 'text', rules : { required: true, } }, }, }, license_group: { associations: { belongs_to: { }, has_many: { resource_pictures: { }, licenses: { }, }, has_one: { }, }, attributes: { name: { type: 'text', rules : { required: true, } }, module_name: { type: 'text', rules : { required: true, } }, caption: { type: 'text', rules : { required: true, } }, url: { type: 'text', rules : { required: true, } }, }, }, license: { associations: { belongs_to: { license_group: { }, system_picture: { }, }, has_many: { resource_pictures: { }, }, has_one: { }, }, attributes: { license_group_id: { type: 'number', rules : { number: true, } }, license_group_module_name: { type: 'text', rules : { required: true, } }, name: { type: 'text', rules : { required: true, } }, caption: { type: 'text', rules : { required: true, } }, system_picture_id: { type: 'number', rules : { required: true, number: true, } }, url: { type: 'text', rules : { required: true, } }, license_group_settings: { type: 'text', rules : { } }, credit_picture_settings: { type: 'text', rules : { } }, }, }, author: { associations: { belongs_to: { }, has_many: { scrolls: { }, comics: { }, stories: { }, sheets: { }, panels: { }, }, has_one: { }, }, attributes: { name: { type: 'text', rules : { required: true, } }, user_id: { type: 'number', rules : { required: true, number: true, } }, }, }, artist: { associations: { belongs_to: { }, has_many: { resource_pictures: { }, }, has_one: { }, }, attributes: { name: { type: 'text', rules : { required: true, } }, author_id: { type: 'number', rules : { required: true, number: true, } }, }, }, system_picture: { associations: { belongs_to: { }, has_many: { balloons: { }, speech_balloon_templates: { }, licenses: { }, writing_formats: { }, }, has_one: { }, }, attributes: { ext: { type: 'text', rules : { required: true, } }, width: { type: 'number', rules : { required: true, number: true, } }, height: { type: 'number', rules : { required: true, number: true, } }, filesize: { type: 'number', rules : { required: true, number: true, } }, md5: { type: 'text', rules : { required: true, required: true, } }, }, }, ############################################################### # # extend models # ################################################################ circle_speech_balloon_speech_balloon: { attributes: { }, }, circle_speech_balloon_balloon: { attributes: { }, }, circle_speech_balloon_speech: { attributes: { }, }, plain_speech_balloon_speech_balloon: { attributes: { }, }, plain_speech_balloon_balloon: { attributes: { }, }, plain_speech_balloon_speech: { attributes: { }, }, square_speech_balloon_speech_balloon: { attributes: { }, }, square_speech_balloon_balloon: { attributes: { }, }, square_speech_balloon_speech: { attributes: { }, }, test_speech_balloon_speech_balloon: { attributes: { a: { type: 'number', rules : { required: true, number: true, } }, }, }, test_speech_balloon_balloon: { attributes: { b: { type: 'number', rules : { required: true, number: true, } }, }, }, test_speech_balloon_speech: { attributes: { c: { type: 'number', rules : { required: true, number: true, } }, }, }, pettanr_creative_commons_v30_licenses_license: { attributes: { open: { type: 'number', rules : { required: true, number: true, } }, commercial: { type: 'number', rules : { required: true, number: true, } }, official: { type: 'number', rules : { required: true, number: true, } }, attribution: { type: 'number', rules : { required: true, number: true, } }, derive: { type: 'number', rules : { required: true, number: true, } }, thumbnail: { type: 'number', rules : { required: true, number: true, } }, gif_convert: { type: 'number', rules : { required: true, number: true, } }, reverse: { type: 'number', rules : { required: true, number: true, } }, sync_vh: { type: 'number', rules : { required: true, number: true, } }, overlap: { type: 'number', rules : { required: true, number: true, } }, }, }, pettanr_creative_commons_v30_licenses_credit_picture: { attributes: { source_url_btn_id: { type: 'number', rules : { required: true, number: true, } }, source_url_off_btn_id: { type: 'number', rules : { required: true, number: true, } }, }, }, pettanr_creative_commons_v30_licenses_attribute: { attributes: { artist_name: { type: 'text', rules : { required: true, } }, caption: { type: 'text', rules : { } }, artist_url: { type: 'text', rules : { } }, source_url: { type: 'text', rules : { } }, more_permission_url: { type: 'text', rules : { } }, }, }, pettanr_pettan_commons_v01_licenses_license: { attributes: { open: { type: 'number', rules : { required: true, number: true, } }, commercial: { type: 'number', rules : { required: true, number: true, } }, official: { type: 'number', rules : { required: true, number: true, } }, attribution: { type: 'number', rules : { required: true, number: true, } }, derive: { type: 'number', rules : { required: true, number: true, } }, thumbnail: { type: 'number', rules : { required: true, number: true, } }, gif_convert: { type: 'number', rules : { required: true, number: true, } }, reverse: { type: 'number', rules : { required: true, number: true, } }, sync_vh: { type: 'number', rules : { required: true, number: true, } }, overlap: { type: 'number', rules : { required: true, number: true, } }, }, }, pettanr_pettan_commons_v01_licenses_credit_picture: { attributes: { source_url_btn_id: { type: 'number', rules : { required: true, number: true, } }, source_url_off_btn_id: { type: 'number', rules : { required: true, number: true, } }, }, }, pettanr_pettan_commons_v01_licenses_attribute: { attributes: { artist_name: { type: 'text', rules : { required: true, } }, caption: { type: 'text', rules : { required: true, } }, sources: { type: 'text', rules : { required: true, } }, }, }, pettanr_pettan_protected_v01_licenses_license: { attributes: { open: { type: 'number', rules : { required: true, number: true, } }, commercial: { type: 'number', rules : { required: true, number: true, } }, official: { type: 'number', rules : { required: true, number: true, } }, attribution: { type: 'number', rules : { required: true, number: true, } }, derive: { type: 'number', rules : { required: true, number: true, } }, thumbnail: { type: 'number', rules : { required: true, number: true, } }, gif_convert: { type: 'number', rules : { required: true, number: true, } }, reverse: { type: 'number', rules : { required: true, number: true, } }, sync_vh: { type: 'number', rules : { required: true, number: true, } }, overlap: { type: 'number', rules : { required: true, number: true, } }, trackback: { type: 'number', rules : { required: true, number: true, } }, }, }, pettanr_pettan_protected_v01_licenses_credit_picture: { attributes: { source_url_btn_id: { type: 'number', rules : { required: true, number: true, } }, source_url_off_btn_id: { type: 'number', rules : { required: true, number: true, } }, }, }, pettanr_pettan_protected_v01_licenses_attribute: { attributes: { artist_name: { type: 'text', rules : { required: true, } }, caption: { type: 'text', rules : { required: true, } }, sources: { type: 'text', rules : { required: true, } }, }, }, pettanr_pettan_public_v01_licenses_license: { attributes: { open: { type: 'number', rules : { required: true, number: true, } }, commercial: { type: 'number', rules : { required: true, number: true, } }, official: { type: 'number', rules : { required: true, number: true, } }, attribution: { type: 'number', rules : { required: true, number: true, } }, derive: { type: 'number', rules : { required: true, number: true, } }, thumbnail: { type: 'number', rules : { required: true, number: true, } }, gif_convert: { type: 'number', rules : { required: true, number: true, } }, reverse: { type: 'number', rules : { required: true, number: true, } }, sync_vh: { type: 'number', rules : { required: true, number: true, } }, overlap: { type: 'number', rules : { required: true, number: true, } }, trackback: { type: 'number', rules : { required: true, number: true, } }, }, }, pettanr_pettan_public_v01_licenses_credit_picture: { attributes: { source_url_btn_id: { type: 'number', rules : { required: true, number: true, } }, }, }, pettanr_pettan_public_v01_licenses_attribute: { attributes: { artist_name: { type: 'text', rules : { required: true, } }, caption: { type: 'text', rules : { required: true, } }, sources: { type: 'text', rules : { required: true, } }, }, }, pettanr_public_domain_v01_licenses_license: { attributes: { open: { type: 'number', rules : { required: true, number: true, } }, commercial: { type: 'number', rules : { required: true, number: true, } }, official: { type: 'number', rules : { required: true, number: true, } }, attribution: { type: 'number', rules : { required: true, number: true, } }, derive: { type: 'number', rules : { required: true, number: true, } }, thumbnail: { type: 'number', rules : { required: true, number: true, } }, gif_convert: { type: 'number', rules : { required: true, number: true, } }, reverse: { type: 'number', rules : { required: true, number: true, } }, sync_vh: { type: 'number', rules : { required: true, number: true, } }, overlap: { type: 'number', rules : { required: true, number: true, } }, trackback: { type: 'number', rules : { required: true, number: true, } }, }, }, pettanr_public_domain_v01_licenses_credit_picture: { attributes: { source_url_btn_id: { type: 'number', rules : { required: true, number: true, } }, source_url_off_btn_id: { type: 'number', rules : { required: true, number: true, } }, }, }, pettanr_public_domain_v01_licenses_attribute: { attributes: { artist_name: { type: 'text', rules : { required: true, } }, source_url: { type: 'text', rules : { required: true, } }, note: { type: 'text', rules : { required: true, } }, }, }, pettanr_unknown_v01_licenses_license: { attributes: { open: { type: 'number', rules : { required: true, number: true, } }, commercial: { type: 'number', rules : { required: true, number: true, } }, official: { type: 'number', rules : { required: true, number: true, } }, attribution: { type: 'number', rules : { required: true, number: true, } }, derive: { type: 'number', rules : { required: true, number: true, } }, thumbnail: { type: 'number', rules : { required: true, number: true, } }, gif_convert: { type: 'number', rules : { required: true, number: true, } }, reverse: { type: 'number', rules : { required: true, number: true, } }, sync_vh: { type: 'number', rules : { required: true, number: true, } }, overlap: { type: 'number', rules : { required: true, number: true, } }, trackback: { type: 'number', rules : { required: true, number: true, } }, }, }, pettanr_unknown_v01_licenses_credit_picture: { attributes: { source_url_btn_id: { type: 'number', rules : { required: true, number: true, } }, source_url_off_btn_id: { type: 'number', rules : { required: true, number: true, } }, }, }, pettanr_unknown_v01_licenses_attribute: { attributes: { source_url: { type: 'text', rules : { required: true, } }, note: { type: 'text', rules : { required: true, } }, }, }, }