ab_admin 0.1.2 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile +1 -0
- data/Guardfile +1 -1
- data/app/assets/images/admin/flags/b_uk.png +0 -0
- data/app/assets/images/admin/preloader.gif +0 -0
- data/app/assets/javascripts/ab_admin/application.js +1 -28
- data/app/assets/javascripts/ab_admin/components/admin_assets.js.coffee +29 -6
- data/app/assets/javascripts/ab_admin/components/gmaps.js.coffee +120 -91
- data/app/assets/javascripts/ab_admin/components/google_translate.js.coffee +3 -2
- data/app/assets/javascripts/ab_admin/core/batch_actions.js.coffee +4 -7
- data/app/assets/javascripts/ab_admin/core/init.js.coffee +8 -10
- data/app/assets/javascripts/ab_admin/core/ui_utils.js.coffee +53 -24
- data/app/assets/javascripts/ab_admin/core/utils.js.coffee +7 -0
- data/app/assets/javascripts/ab_admin/inputs/datetime_input.js.coffee +1 -2
- data/app/assets/javascripts/ab_admin/main.js +28 -0
- data/app/assets/stylesheets/ab_admin/application.css.scss +1 -10
- data/app/assets/stylesheets/ab_admin/bootstrap_and_overrides.css.scss +4 -0
- data/app/assets/stylesheets/ab_admin/components/_base.css.scss +4 -1
- data/app/assets/stylesheets/ab_admin/components/_form.css.scss +10 -13
- data/app/assets/stylesheets/ab_admin/components/_geo_input.css.scss +5 -9
- data/app/assets/stylesheets/ab_admin/fileupload.css.scss +68 -102
- data/app/assets/stylesheets/ab_admin/main.css.scss +8 -0
- data/app/controllers/admin/base_controller.rb +18 -14
- data/app/controllers/admin/manager_controller.rb +51 -6
- data/app/controllers/admin/users_controller.rb +23 -0
- data/app/views/admin/fileupload/_asset.html.slim +8 -0
- data/app/views/admin/fileupload/_container.html.slim +10 -0
- data/app/views/admin/fileupload/_file.html.slim +5 -0
- data/app/views/admin/fileupload/_ftmpl.html.slim +6 -0
- data/app/views/admin/fileupload/_tmpl.html.slim +9 -0
- data/app/views/admin/users/_form.html.slim +1 -0
- data/config/locales/en.yml +5 -60
- data/config/locales/ru.yml +14 -63
- data/config/routes.rb +7 -4
- data/features/dsl/custom_actions.feature +62 -0
- data/features/dsl/parent_resource.feature +18 -0
- data/features/step_definitions/configuration_steps.rb +6 -0
- data/features/step_definitions/dsl/parent_resource_steps.rb +8 -0
- data/features/step_definitions/settings_steps.rb +1 -1
- data/features/step_definitions/web_steps/transforms_steps.rb +3 -0
- data/features/support/paths.rb +3 -0
- data/lib/ab_admin.rb +5 -0
- data/lib/ab_admin/abstract_resource.rb +28 -4
- data/lib/ab_admin/carrierwave/base_uploader.rb +22 -22
- data/lib/ab_admin/concerns/admin_addition.rb +2 -2
- data/lib/ab_admin/concerns/utilities.rb +4 -4
- data/lib/ab_admin/config/base.rb +18 -0
- data/lib/ab_admin/controllers/head_options.rb +1 -1
- data/lib/ab_admin/core_ext/array.rb +4 -0
- data/lib/ab_admin/core_ext/string.rb +9 -10
- data/lib/ab_admin/hooks/quiet_scope_page.rb +16 -16
- data/lib/ab_admin/hooks/simple_form_hooks.rb +13 -13
- data/lib/ab_admin/i18n_tools/model_translator.rb +67 -0
- data/lib/ab_admin/models/asset.rb +32 -1
- data/lib/ab_admin/models/attachment_file.rb +1 -1
- data/lib/ab_admin/models/locator.rb +7 -0
- data/lib/ab_admin/models/settings.rb +7 -0
- data/lib/ab_admin/models/structure.rb +4 -0
- data/lib/ab_admin/utils.rb +2 -2
- data/lib/ab_admin/version.rb +1 -1
- data/lib/ab_admin/views/admin_helpers.rb +3 -3
- data/lib/ab_admin/views/admin_navigation_helpers.rb +1 -1
- data/lib/ab_admin/views/form_builder.rb +42 -39
- data/lib/ab_admin/views/helpers.rb +5 -0
- data/lib/ab_admin/views/manager_helpers.rb +10 -0
- data/lib/ab_admin/views/search_form_builder.rb +12 -5
- data/lib/generators/ab_admin/install/install_generator.rb +1 -1
- data/lib/generators/ab_admin/install/templates/config/admin_menu.rb +2 -2
- data/lib/generators/ab_admin/install/templates/helpers/admin/structures_helper.rb +1 -1
- data/lib/generators/ab_admin/install/templates/models/attachment_file.rb +2 -0
- data/lib/generators/ab_admin/install/templates/models/locator.rb +0 -1
- data/lib/generators/ab_admin/install/templates/models/settings.rb +0 -1
- data/lib/generators/ab_admin/install/templates/models/static_page.rb +1 -0
- data/lib/generators/ab_admin/install/templates/{scripts → script}/unicorn.sh +0 -0
- data/lib/generators/ab_admin/install/templates/uploaders/avatar_uploader.rb +4 -0
- data/lib/generators/ab_admin/resource/templates/_search_form.haml.erb +1 -1
- data/lib/generators/ab_admin/resource/templates/_search_form.slim.erb +1 -1
- data/lib/generators/ab_admin/resource/templates/_table.haml.erb +1 -2
- data/lib/generators/ab_admin/resource/templates/_table.slim.erb +1 -2
- data/lib/generators/template.rb +1 -0
- data/lib/tasks/i18n.rake +7 -0
- data/spec/dummy/app/models/ab_admin/ab_admin_collection.rb +35 -0
- data/spec/dummy/app/models/ab_admin/ab_admin_product.rb +2 -0
- data/spec/dummy/app/models/admin_menu.rb +4 -2
- data/spec/dummy/app/models/collection.rb +3 -1
- data/spec/generators/install_generator_spec.rb +1 -1
- data/spec/generators/resource_generator_spec.rb +1 -1
- data/spec/models/avatar_spec.rb +29 -2
- metadata +25 -12
- data/app/views/admin/fileupload/_asset.html.erb +0 -5
- data/app/views/admin/fileupload/_container.html.erb +0 -28
- data/app/views/admin/fileupload/_fcontainer.html.erb +0 -25
- data/app/views/admin/fileupload/_file.html.erb +0 -5
- data/app/views/admin/fileupload/_ftmpl.html.erb +0 -7
- data/app/views/admin/fileupload/_tmpl.html.erb +0 -9
- data/lib/ab_admin/utils/csv_builder.rb +0 -52
|
@@ -67,7 +67,38 @@ module AbAdmin
|
|
|
67
67
|
|
|
68
68
|
def main!
|
|
69
69
|
self.class.update_all('is_main=0', ['assetable_type=? AND assetable_id=? AND type=?', assetable_type, assetable_id, type])
|
|
70
|
-
update_column(:is_main, true)
|
|
70
|
+
update_column(:is_main, true)
|
|
71
|
+
refresh_assetable
|
|
72
|
+
self
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def rotate!
|
|
76
|
+
rename!
|
|
77
|
+
self.rotate_degrees = 90
|
|
78
|
+
save!
|
|
79
|
+
refresh_assetable
|
|
80
|
+
self
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def rename!
|
|
84
|
+
rename
|
|
85
|
+
save!
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def rename
|
|
89
|
+
file = data.file
|
|
90
|
+
path = data.path
|
|
91
|
+
ext = File.extname(path)
|
|
92
|
+
new_path = File.join(File.dirname(path), "#{File.basename(path).chomp(ext)}_#{rand(99)}#{ext}")
|
|
93
|
+
new_file = ::CarrierWave::SanitizedFile.new file.move_to(new_path)
|
|
94
|
+
data.cache!(new_file)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def refresh_assetable
|
|
98
|
+
return unless assetable.try(:persisted?)
|
|
99
|
+
assetable.touch
|
|
100
|
+
assetable.tire.update_index if assetable.respond_to?(:tire)
|
|
101
|
+
true
|
|
71
102
|
end
|
|
72
103
|
|
|
73
104
|
def full_url(*args)
|
|
@@ -3,6 +3,13 @@ module AbAdmin
|
|
|
3
3
|
module Locator
|
|
4
4
|
extend ActiveSupport::Concern
|
|
5
5
|
|
|
6
|
+
included do
|
|
7
|
+
extend ActiveModel::Naming
|
|
8
|
+
extend ActiveRecord::Translation
|
|
9
|
+
class_attribute :base_class
|
|
10
|
+
self.base_class = self
|
|
11
|
+
end
|
|
12
|
+
|
|
6
13
|
module ClassMethods
|
|
7
14
|
def find_files
|
|
8
15
|
Dir[Rails.root.join('config', 'locales', '*.yml')]
|
|
@@ -3,6 +3,13 @@ module AbAdmin
|
|
|
3
3
|
module Settings
|
|
4
4
|
extend ActiveSupport::Concern
|
|
5
5
|
|
|
6
|
+
included do
|
|
7
|
+
extend ActiveModel::Naming
|
|
8
|
+
extend ActiveRecord::Translation
|
|
9
|
+
class_attribute :base_class
|
|
10
|
+
self.base_class = self
|
|
11
|
+
end
|
|
12
|
+
|
|
6
13
|
module ClassMethods
|
|
7
14
|
def load
|
|
8
15
|
configatron.configure_from_hash instance.all
|
data/lib/ab_admin/utils.rb
CHANGED
|
@@ -109,7 +109,7 @@ module AbAdmin
|
|
|
109
109
|
|
|
110
110
|
def pretty_data(object)
|
|
111
111
|
case object
|
|
112
|
-
when String, Integer
|
|
112
|
+
when String, Integer, BigDecimal, Float
|
|
113
113
|
object
|
|
114
114
|
when TrueClass
|
|
115
115
|
'+'
|
|
@@ -120,7 +120,7 @@ module AbAdmin
|
|
|
120
120
|
when NilClass
|
|
121
121
|
''
|
|
122
122
|
else
|
|
123
|
-
AbAdmin.safe_display_name(object)
|
|
123
|
+
AbAdmin.safe_display_name(object) || object
|
|
124
124
|
end
|
|
125
125
|
end
|
|
126
126
|
|
data/lib/ab_admin/version.rb
CHANGED
|
@@ -55,7 +55,7 @@ module AbAdmin
|
|
|
55
55
|
|
|
56
56
|
def layout_css
|
|
57
57
|
css = []
|
|
58
|
-
css << 'content_with_sidebar' if settings[:sidebar]
|
|
58
|
+
css << 'content_with_sidebar' if settings[:sidebar] || content_for?(:sidebar)
|
|
59
59
|
css << 'well' if settings[:well]
|
|
60
60
|
css << "#{settings[:index_view]}_view"
|
|
61
61
|
css
|
|
@@ -75,7 +75,7 @@ module AbAdmin
|
|
|
75
75
|
|
|
76
76
|
def admin_pretty_data(object)
|
|
77
77
|
case object
|
|
78
|
-
when String, Integer
|
|
78
|
+
when String, Integer, BigDecimal, Float
|
|
79
79
|
object
|
|
80
80
|
when TrueClass, FalseClass
|
|
81
81
|
color_bool(object)
|
|
@@ -86,7 +86,7 @@ module AbAdmin
|
|
|
86
86
|
when ActiveRecord::Base
|
|
87
87
|
admin_show_link(object)
|
|
88
88
|
else
|
|
89
|
-
AbAdmin.safe_display_name(object)
|
|
89
|
+
AbAdmin.safe_display_name(object) || object
|
|
90
90
|
end
|
|
91
91
|
end
|
|
92
92
|
|
|
@@ -68,7 +68,7 @@ module AbAdmin
|
|
|
68
68
|
link_to icon('eye-open', true), path, :class => 'btn btn-small btn-inverse', :title => t('admin.actions.preview.link'), :target => '_blank'
|
|
69
69
|
end
|
|
70
70
|
when AbAdmin::Config::ActionItem
|
|
71
|
-
instance_exec(&action.data) if action.for_context?(self)
|
|
71
|
+
instance_exec(item, &action.data) if action.for_context?(self)
|
|
72
72
|
else
|
|
73
73
|
meth = "#{resource_instance_name}_short_action_link"
|
|
74
74
|
send(meth, action, item) if respond_to? meth
|
|
@@ -24,12 +24,12 @@ module AbAdmin
|
|
|
24
24
|
case options[:as]
|
|
25
25
|
when :uploader
|
|
26
26
|
title = options[:title] || I18n.t("admin.#{attribute_name}", :default => object.class.han(attribute_name))
|
|
27
|
-
return template.input_set(title) { attach_file_field(attribute_name, options
|
|
27
|
+
return template.input_set(title) { attach_file_field(attribute_name, options) }
|
|
28
28
|
when :map
|
|
29
29
|
title = options[:title] || I18n.t("admin.#{attribute_name}", :default => object.class.han(attribute_name))
|
|
30
30
|
prefix = options[:prefix] || object.class.model_name.singular
|
|
31
31
|
data_fields = [:lat, :lon, :zoom].map { |attr| hidden_field(attr) }.join.html_safe
|
|
32
|
-
return template.input_set(title) { data_fields + geo_input(prefix) }
|
|
32
|
+
return template.input_set(title) { data_fields + geo_input(prefix, options[:js_options]) }
|
|
33
33
|
end
|
|
34
34
|
|
|
35
35
|
attribute_name = "#{attribute_name}_#{options[:locale]}" if options[:locale]
|
|
@@ -59,17 +59,23 @@ module AbAdmin
|
|
|
59
59
|
template.render 'admin/shared/save_buttons'
|
|
60
60
|
end
|
|
61
61
|
|
|
62
|
-
def geo_input(prefix, &block)
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
62
|
+
def geo_input(prefix, js_options={}, &block)
|
|
63
|
+
input_name = "#{prefix}_geo_ac"
|
|
64
|
+
js = %Q[$("##{prefix}_geo_input").geoInput(#{js_options.to_json})]
|
|
65
|
+
<<-HTML.html_safe
|
|
66
|
+
<script src="//maps.googleapis.com/maps/api/js?sensor=false&libraries=places&language=#{I18n.locale}" type="text/javascript"></script>
|
|
67
|
+
<div class="geo_input" id="#{prefix}_geo_input">
|
|
68
|
+
<div class="control-group">
|
|
69
|
+
<label class="control-label" for="#{input_name}">#{I18n.t('admin.geo_autocomplete')}</label>
|
|
70
|
+
<div class="controls">
|
|
71
|
+
<input type="text" name="#{input_name}" id="#{input_name}" class="geo_ac string">
|
|
72
|
+
</div>
|
|
73
|
+
</div>
|
|
74
|
+
#{template.capture(&block) if block_given?}
|
|
75
|
+
<div class="controls"><div id="#{prefix}_map" class="admin_map thumbnail"></div></div>
|
|
76
|
+
#{template.init_js(js)}
|
|
77
|
+
</div>
|
|
78
|
+
HTML
|
|
73
79
|
end
|
|
74
80
|
|
|
75
81
|
def attach_file_field(attribute_name, options = {})
|
|
@@ -100,8 +106,7 @@ module AbAdmin
|
|
|
100
106
|
script_options['allowedExtensions'] ||= %w(pdf doc docx xls xlsx ppt pptx zip rar csv jpg jpeg gif png)
|
|
101
107
|
script_options['template_id'] = '#fileupload_ftmpl'
|
|
102
108
|
options[:asset_render_template] = 'file'
|
|
103
|
-
|
|
104
|
-
if options[:video]
|
|
109
|
+
elsif options[:video]
|
|
105
110
|
script_options['allowedExtensions'] ||= %w(mp4 flv)
|
|
106
111
|
script_options['template_id'] = '#fileupload_vtmpl'
|
|
107
112
|
options[:asset_render_template] = 'video_file'
|
|
@@ -111,39 +116,37 @@ module AbAdmin
|
|
|
111
116
|
script_options['element'] ||= element_id
|
|
112
117
|
script_options['sizeLimit'] = max_size.megabytes.to_i
|
|
113
118
|
|
|
114
|
-
label ||= if object && object.class.respond_to?(:human_attribute_name)
|
|
115
|
-
object.class.human_attribute_name(attribute_name)
|
|
116
|
-
end
|
|
117
|
-
|
|
118
119
|
locals = {
|
|
119
|
-
:
|
|
120
|
-
:
|
|
121
|
-
:
|
|
122
|
-
:
|
|
123
|
-
:
|
|
124
|
-
:
|
|
125
|
-
:
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
120
|
+
element_id: element_id,
|
|
121
|
+
file_title: (options[:file_title] || script_options['allowedExtensions'].join(', ')),
|
|
122
|
+
file_max_size: max_size,
|
|
123
|
+
assets: [value].flatten.delete_if { |v| v.nil? || v.new_record? },
|
|
124
|
+
multiple: script_options['multiple'],
|
|
125
|
+
asset_render_template: (options[:asset_render_template] || 'asset'),
|
|
126
|
+
container_data: {
|
|
127
|
+
klass: params[:assetable_type],
|
|
128
|
+
asset: asset_klass.to_s,
|
|
129
|
+
assoc: params[:method],
|
|
130
|
+
multiple: script_options['multiple']
|
|
131
|
+
}
|
|
131
132
|
}
|
|
132
133
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
134
|
+
locals[:css_class] = ['fileupload', "#{locals[:asset_render_template]}_asset_type"]
|
|
135
|
+
locals[:css_class] << (script_options['multiple'] ? 'many_assets' : 'one_asset')
|
|
136
|
+
|
|
137
|
+
js_opts = [locals[:element_id], template.sort_admin_assets_path(:klass => asset_klass), locals[:multiple]].map(&:inspect).join(', ')
|
|
138
|
+
locals[:js] = <<-JAVASCRIPT
|
|
139
|
+
var upl = new qq.FileUploaderInput(#{script_options.to_json});
|
|
140
|
+
upl._setupDragDrop();
|
|
141
|
+
new AdminAssets(#{js_opts});
|
|
142
|
+
JAVASCRIPT
|
|
140
143
|
|
|
141
144
|
if options[:description]
|
|
142
145
|
opts = [attribute_name, object.class.name, object.id, object.fileupload_guid].map { |i| i.to_s.inspect }.join(', ')
|
|
143
146
|
template.concat javascript_tag("$(function(){new AssetDescription(#{opts})})")
|
|
144
147
|
end
|
|
145
148
|
|
|
146
|
-
template.render(:partial => "admin/fileupload/#{
|
|
149
|
+
template.render(:partial => "admin/fileupload/#{options[:container] || 'container'}", :locals => locals)
|
|
147
150
|
end
|
|
148
151
|
|
|
149
152
|
protected
|
|
@@ -54,6 +54,11 @@ module AbAdmin
|
|
|
54
54
|
%Q[<script type='text/javascript'>$(function(){#{js}})</script>].html_safe
|
|
55
55
|
end
|
|
56
56
|
|
|
57
|
+
def image_tag_if(image, options={})
|
|
58
|
+
return unless image
|
|
59
|
+
image_tag image, options
|
|
60
|
+
end
|
|
61
|
+
|
|
57
62
|
def render_title
|
|
58
63
|
@page_title || I18n.t("page.title")
|
|
59
64
|
end
|
|
@@ -17,6 +17,16 @@ module AbAdmin
|
|
|
17
17
|
def show_builder
|
|
18
18
|
manager.show ||= ::AbAdmin::Config::Show.default_for_model(resource_class)
|
|
19
19
|
end
|
|
20
|
+
|
|
21
|
+
def action_item_admin_path(name, record=nil)
|
|
22
|
+
custom_action = manager.custom_action_for(name, self)
|
|
23
|
+
if custom_action.collection?
|
|
24
|
+
admin_collection_action_path(:model_name => resource_collection_name, :custom_action => custom_action.name)
|
|
25
|
+
else
|
|
26
|
+
record ||= resource
|
|
27
|
+
admin_member_action_path(:model_name => resource_collection_name, :id => record.id, :custom_action => custom_action.name)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
20
30
|
end
|
|
21
31
|
end
|
|
22
32
|
end
|
|
@@ -15,17 +15,24 @@ module AbAdmin
|
|
|
15
15
|
def select_field(attr, options={})
|
|
16
16
|
label(attr, options[:label]) + content_tag(:div, :class => 'controls') do
|
|
17
17
|
param = "#{options[:value_attr] || attr}_eq"
|
|
18
|
-
|
|
19
|
-
if options[:collection].
|
|
20
|
-
|
|
18
|
+
|
|
19
|
+
if options[:collection].is_a?(Proc)
|
|
20
|
+
collection = options[:collection].call
|
|
21
21
|
else
|
|
22
|
-
|
|
22
|
+
collection = options[:collection] || []
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
if collection.first.try(:respond_to?, :id)
|
|
26
|
+
collection.map!{|r| [AbAdmin.display_name(r), r.id] }
|
|
23
27
|
end
|
|
28
|
+
|
|
24
29
|
options[:html_options] ||= {}
|
|
25
30
|
if options[:fancy] || !options.has_key?(:fancy)
|
|
26
31
|
options[:html_options][:class] = [options[:html_options][:class], 'fancy_select'].join(' ')
|
|
27
32
|
end
|
|
28
|
-
|
|
33
|
+
|
|
34
|
+
html_options = options[:html_options].merge(:include_blank => true, :id => "q_#{attr}")
|
|
35
|
+
select_tag("q[#{param}]", options_for_select(collection, params[:q][param]), html_options)
|
|
29
36
|
end
|
|
30
37
|
end
|
|
31
38
|
|
|
@@ -21,7 +21,7 @@ module AbAdmin
|
|
|
21
21
|
|
|
22
22
|
template('config/logrotate-config', 'config/logrotate-config')
|
|
23
23
|
template('config/nginx.conf', 'config/nginx.conf')
|
|
24
|
-
template('
|
|
24
|
+
template('script/unicorn.sh', 'script/unicorn.sh')
|
|
25
25
|
template('config/settings.yml', 'config/settings/settings.yml')
|
|
26
26
|
template('config/settings.yml', 'config/settings/settings.local.yml')
|
|
27
27
|
copy_file('config/unicorn_config.rb', 'config/unicorn_config.rb')
|
|
@@ -3,8 +3,8 @@ class AdminMenu < AbAdmin::MenuBuilder
|
|
|
3
3
|
model User
|
|
4
4
|
group :system do
|
|
5
5
|
model Structure
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
link Locator.model_name.human, '/admin/locators'
|
|
7
|
+
link Settings.model_name.human, edit_admin_settings_path
|
|
8
8
|
end
|
|
9
9
|
end
|
|
10
10
|
end
|
|
File without changes
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
-%>
|
|
29
29
|
<% translated_columns.each do |col| -%>
|
|
30
30
|
<% next if [:description].include?(col.to_sym) -%>
|
|
31
|
-
= f.input
|
|
31
|
+
= f.input :<%= col %>
|
|
32
32
|
<% end -%>
|
|
33
33
|
<% model.columns_hash.except('id', 'slug').each do |key, col| -%>
|
|
34
34
|
<%= input_by_col(key, col) %>
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
-%>
|
|
29
29
|
<% translated_columns.each do |col| -%>
|
|
30
30
|
<% next if [:description].include?(col.to_sym) -%>
|
|
31
|
-
= f.input
|
|
31
|
+
= f.input :<%= col %>
|
|
32
32
|
<% end -%>
|
|
33
33
|
<% model.columns_hash.except('id', 'slug').each do |key, col| -%>
|
|
34
34
|
<%= input_by_col(key, col) %>
|