scaffold_assoc 0.0.1
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.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +3 -0
- data/Rakefile +32 -0
- data/lib/generators/scaffold_assoc/install/install_generator.rb +21 -0
- data/lib/generators/scaffold_assoc/scaffold_assoc_generator.rb +158 -0
- data/lib/generators/scaffold_assoc/templates/controller.rb +75 -0
- data/lib/generators/scaffold_assoc/templates/erb/_form.html.erb +37 -0
- data/lib/generators/scaffold_assoc/templates/erb/edit.html.erb +6 -0
- data/lib/generators/scaffold_assoc/templates/erb/index.html.erb +29 -0
- data/lib/generators/scaffold_assoc/templates/erb/new.html.erb +5 -0
- data/lib/generators/scaffold_assoc/templates/erb/show.html.erb +11 -0
- data/lib/generators/scaffold_assoc/templates/haml/_form.html.haml +15 -0
- data/lib/generators/scaffold_assoc/templates/haml/edit.html.haml +7 -0
- data/lib/generators/scaffold_assoc/templates/haml/index.html.haml +23 -0
- data/lib/generators/scaffold_assoc/templates/haml/new.html.haml +4 -0
- data/lib/generators/scaffold_assoc/templates/haml/show.html.haml +11 -0
- data/lib/generators/scaffold_assoc/templates/migration.rb +15 -0
- data/lib/generators/scaffold_assoc/templates/model.rb +3 -0
- data/lib/scaffold_assoc/version.rb +3 -0
- data/lib/scaffold_assoc.rb +2 -0
- data/lib/tasks/scaffold_assoc_tasks.rake +4 -0
- data/test/dummy/README.rdoc +28 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/assets/javascripts/application.js +13 -0
- data/test/dummy/app/assets/javascripts/posts.js +2 -0
- data/test/dummy/app/assets/stylesheets/application.css +13 -0
- data/test/dummy/app/assets/stylesheets/posts.css +4 -0
- data/test/dummy/app/assets/stylesheets/scaffold.css +56 -0
- data/test/dummy/app/controllers/application_controller.rb +5 -0
- data/test/dummy/app/controllers/comments_controller.rb +65 -0
- data/test/dummy/app/controllers/posts_controller.rb +58 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/helpers/posts_helper.rb +2 -0
- data/test/dummy/app/models/comment.rb +3 -0
- data/test/dummy/app/models/post.rb +2 -0
- data/test/dummy/app/views/comments/_form.html.erb +25 -0
- data/test/dummy/app/views/comments/edit.html.erb +6 -0
- data/test/dummy/app/views/comments/index.html.erb +27 -0
- data/test/dummy/app/views/comments/new.html.erb +5 -0
- data/test/dummy/app/views/comments/show.html.erb +14 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/app/views/posts/_form.html.erb +25 -0
- data/test/dummy/app/views/posts/edit.html.erb +6 -0
- data/test/dummy/app/views/posts/index.html.erb +29 -0
- data/test/dummy/app/views/posts/new.html.erb +5 -0
- data/test/dummy/app/views/posts/show.html.erb +15 -0
- data/test/dummy/bin/bundle +3 -0
- data/test/dummy/bin/rails +4 -0
- data/test/dummy/bin/rake +4 -0
- data/test/dummy/config/application.rb +23 -0
- data/test/dummy/config/boot.rb +5 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +29 -0
- data/test/dummy/config/environments/production.rb +80 -0
- data/test/dummy/config/environments/test.rb +36 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/secret_token.rb +12 -0
- data/test/dummy/config/initializers/session_store.rb +3 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +23 -0
- data/test/dummy/config/routes.rb +63 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/db/migrate/20150408174454_create_posts.rb +10 -0
- data/test/dummy/db/migrate/20150408174500_create_comments.rb +17 -0
- data/test/dummy/db/schema.rb +31 -0
- data/test/dummy/log/development.log +693 -0
- data/test/dummy/public/404.html +58 -0
- data/test/dummy/public/422.html +58 -0
- data/test/dummy/public/500.html +57 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/test/controllers/posts_controller_test.rb +49 -0
- data/test/dummy/test/fixtures/posts.yml +9 -0
- data/test/dummy/test/models/post_test.rb +7 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/1e8f75a6b5b33970fb8e397347caa0a1 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/24204f742af588c8166d3160b500d20f +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/371bf96e99717688ed7313a0c53f4212 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/416150dc3ac35079c94273cc46e90aa6 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/510da110ae528e2d22533be39ff696c5 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/5384ad85f52d3272dbc64d46ef3876a4 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/6fc757c2c8329244ca95d6909865bbc2 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/c85016e7bbd4f3adbb7635d01f85d39b +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/d066c004d1fd26ae76a61303a7a18145 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
- data/test/scaffold_assoc_test.rb +7 -0
- data/test/test_helper.rb +15 -0
- metadata +240 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: da281a0faf589cde7cdd9a09b8b9c013b142820c
|
|
4
|
+
data.tar.gz: 68815d596c324af225bd9f82f29b8f6a539d3026
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: dbb7baaa736de4e1d1703309eac7ca938b990d2ede482bb2eaddd668719a36c8902daeeb35eff1be86e2c5eef0ab06f3791399be7ff7939a3fab8c5cdfc1fbcc
|
|
7
|
+
data.tar.gz: ff8f8e1454bb75b7b049ef22c80ef48d2da198001e28f9161fd64fed69b54795aba769f2000b624e391bda1c9d25c5cb4151ed058a3d0498c2b8d94328e7698a
|
data/MIT-LICENSE
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
Copyright 2014 YOURNAME
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
4
|
+
a copy of this software and associated documentation files (the
|
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
9
|
+
the following conditions:
|
|
10
|
+
|
|
11
|
+
The above copyright notice and this permission notice shall be
|
|
12
|
+
included in all copies or substantial portions of the Software.
|
|
13
|
+
|
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
data/Rakefile
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
begin
|
|
2
|
+
require 'bundler/setup'
|
|
3
|
+
rescue LoadError
|
|
4
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
require 'rdoc/task'
|
|
8
|
+
|
|
9
|
+
RDoc::Task.new(:rdoc) do |rdoc|
|
|
10
|
+
rdoc.rdoc_dir = 'rdoc'
|
|
11
|
+
rdoc.title = 'ScaffoldAssoc'
|
|
12
|
+
rdoc.options << '--line-numbers'
|
|
13
|
+
rdoc.rdoc_files.include('README.rdoc')
|
|
14
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
Bundler::GemHelper.install_tasks
|
|
21
|
+
|
|
22
|
+
require 'rake/testtask'
|
|
23
|
+
|
|
24
|
+
Rake::TestTask.new(:test) do |t|
|
|
25
|
+
t.libs << 'lib'
|
|
26
|
+
t.libs << 'test'
|
|
27
|
+
t.pattern = 'test/**/*_test.rb'
|
|
28
|
+
t.verbose = false
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
task default: :test
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
module ScaffoldAssoc
|
|
2
|
+
module Generators
|
|
3
|
+
class InstallGenerator < ::Rails::Generators::Base
|
|
4
|
+
|
|
5
|
+
desc <<DESC
|
|
6
|
+
Description:
|
|
7
|
+
Copy scaffold_assoc view templates to your application.
|
|
8
|
+
DESC
|
|
9
|
+
|
|
10
|
+
def self.source_root
|
|
11
|
+
@source_root ||= File.expand_path(File.join(File.dirname(__FILE__), '../templates'))
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def install
|
|
15
|
+
directory 'erb', 'lib/rails/scaffold_assoc/templates/erb'
|
|
16
|
+
directory 'haml', 'lib/rails/scaffold_assoc/templates/haml'
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
module Rails
|
|
2
|
+
module Generators
|
|
3
|
+
class ScaffoldAssocGenerator < NamedBase # :nodoc:
|
|
4
|
+
|
|
5
|
+
include Rails::Generators::Migration
|
|
6
|
+
|
|
7
|
+
attr_accessor :parent_name, :flags
|
|
8
|
+
|
|
9
|
+
def source_paths
|
|
10
|
+
[
|
|
11
|
+
File.expand_path(File.join(File.dirname(__FILE__), '../../rails/scaffold_assoc/templates')),
|
|
12
|
+
File.expand_path(File.join(File.dirname(__FILE__), '/templates'))]
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
argument :attributes, type: :array, default: [], banner: "field[:type][:index] field[:type][:index]"
|
|
16
|
+
|
|
17
|
+
class_option :orm, :banner => "NAME", :type => :string, :required => true, :default => :active_record,
|
|
18
|
+
:desc => "ORM to generate the controller for"
|
|
19
|
+
|
|
20
|
+
class_option :template_engine, :default => :erb
|
|
21
|
+
class_option :force_plural, type: :boolean, desc: "Forces the use of a plural ModelName"
|
|
22
|
+
class_option :skip_model, :type => :boolean, :default => false, :desc => "Don't generate a model or migration."
|
|
23
|
+
class_option :skip_migration, :type => :boolean, :default => false, :desc => "Don't generate migration for model."
|
|
24
|
+
class_option :skip_controller, :type => :boolean, :default => false, :desc => "Don't generate controller for model."
|
|
25
|
+
class_option :skip_views, :type => :boolean, :default => false, :desc => "Don't generate views for model."
|
|
26
|
+
|
|
27
|
+
hook_for :form_builder, :as => :scaffold
|
|
28
|
+
|
|
29
|
+
def initialize(args, *options)
|
|
30
|
+
a = args[0].split("/")
|
|
31
|
+
self.parent_name = a[0]
|
|
32
|
+
name = a[1]
|
|
33
|
+
args[0] = name
|
|
34
|
+
super
|
|
35
|
+
assign_controller_names!(name.pluralize)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def scaffold_assoc_create_migration
|
|
39
|
+
if options[:skip_model] || options[:skip_migration]
|
|
40
|
+
return
|
|
41
|
+
end
|
|
42
|
+
migration_template 'migration.rb', File.join('db/migrate/', "create_" + plural_table_name + ".rb")
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def self.next_migration_number(path)
|
|
46
|
+
@migration_number = current_migration_number(path) + 1
|
|
47
|
+
ActiveRecord::Migration.next_migration_number(@migration_number)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def create_route
|
|
51
|
+
gsub_file "config/routes.rb", /(\s*resources :#{parent_table_name})\s*\n/, <<-CODE
|
|
52
|
+
\\1 do
|
|
53
|
+
end
|
|
54
|
+
CODE
|
|
55
|
+
insert_into_file "config/routes.rb", after: /(\s*resources :#{parent_table_name})\s*do\s*\n/ do
|
|
56
|
+
<<-CODE
|
|
57
|
+
resources :#{table_name}
|
|
58
|
+
CODE
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def create_model
|
|
63
|
+
if options[:skip_model]
|
|
64
|
+
return
|
|
65
|
+
end
|
|
66
|
+
template 'model.rb', File.join('app/models', singular_table_name + ".rb")
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def create_controller_files
|
|
70
|
+
if options[:skip_controller]
|
|
71
|
+
return
|
|
72
|
+
end
|
|
73
|
+
template "controller.rb", File.join('app/controllers', controller_class_path, "#{controller_file_name}_controller.rb")
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def copy_view_files
|
|
77
|
+
if options[:skip_views]
|
|
78
|
+
return
|
|
79
|
+
end
|
|
80
|
+
available_views.each do |view|
|
|
81
|
+
filename = [view, 'html', handler].compact.join(".")
|
|
82
|
+
template "#{handler}/#{view}.html.#{handler}", File.join("app/views", controller_file_path, filename)
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
protected
|
|
87
|
+
|
|
88
|
+
attr_reader :controller_name, :controller_file_name
|
|
89
|
+
|
|
90
|
+
def available_views
|
|
91
|
+
%w(index edit show new _form)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def handler
|
|
95
|
+
options[:template_engine]
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def parent_table_name
|
|
99
|
+
return parent_name.tableize
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def parent_singular_table_name
|
|
103
|
+
return parent_table_name.singularize
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def controller_class_path
|
|
107
|
+
if options[:model_name]
|
|
108
|
+
@controller_class_path
|
|
109
|
+
else
|
|
110
|
+
class_path
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def assign_controller_names!(name)
|
|
115
|
+
@controller_name = name
|
|
116
|
+
@controller_class_path = name.include?('/') ? name.split('/') : name.split('::')
|
|
117
|
+
@controller_class_path.map! { |m| m.underscore }
|
|
118
|
+
@controller_file_name = @controller_class_path.pop
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def controller_file_path
|
|
122
|
+
@controller_file_path ||= (controller_class_path + [controller_file_name]).join('/')
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def controller_class_name
|
|
126
|
+
(controller_class_path + [controller_file_name]).map!{ |m| m.camelize }.join('::')
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def controller_i18n_scope
|
|
130
|
+
@controller_i18n_scope ||= controller_file_path.tr('/', '.')
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
# Loads the ORM::Generators::ActiveModel class. This class is responsible
|
|
134
|
+
# to tell scaffold entities how to generate an specific method for the
|
|
135
|
+
# ORM. Check Rails::Generators::ActiveModel for more information.
|
|
136
|
+
def orm_class
|
|
137
|
+
@orm_class ||= begin
|
|
138
|
+
# Raise an error if the class_option :orm was not defined.
|
|
139
|
+
unless self.class.class_options[:orm]
|
|
140
|
+
raise "You need to have :orm as class option to invoke orm_class and orm_instance"
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
begin
|
|
144
|
+
"#{options[:orm].to_s.camelize}::Generators::ActiveModel".constantize
|
|
145
|
+
rescue NameError
|
|
146
|
+
Rails::Generators::ActiveModel
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
# Initialize ORM::Generators::ActiveModel to access instance methods.
|
|
152
|
+
def orm_instance(name=singular_table_name)
|
|
153
|
+
@orm_instance ||= orm_class.new(name)
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
end
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
<% if namespaced? -%>
|
|
2
|
+
require_dependency "<%= namespaced_file_path %>/application_controller"
|
|
3
|
+
|
|
4
|
+
<% end -%>
|
|
5
|
+
<% module_namespacing do -%>
|
|
6
|
+
class <%= controller_class_name %>Controller < ApplicationController
|
|
7
|
+
before_action :set_<%= parent_singular_table_name %>, only: [:new, :create, :index, :show, :edit, :update, :destroy]
|
|
8
|
+
before_action :set_<%= singular_table_name %>, only: [:show, :edit, :update, :destroy]
|
|
9
|
+
|
|
10
|
+
# GET <%= route_url %>
|
|
11
|
+
def index
|
|
12
|
+
@<%= plural_table_name %> = @<%= parent_singular_table_name %> ? <%= class_name %>.where(<%= parent_singular_table_name %>: @<%= parent_singular_table_name %>) : <%= orm_class.all(class_name) %>
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# GET <%= route_url %>/1
|
|
16
|
+
def show
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# GET <%= route_url %>/new
|
|
20
|
+
def new
|
|
21
|
+
@<%= singular_table_name %> = <%= orm_class.build(class_name) %>
|
|
22
|
+
@<%= singular_table_name %>.<%= parent_singular_table_name %> = @<%= parent_singular_table_name %>
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# GET <%= route_url %>/1/edit
|
|
26
|
+
def edit
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# POST <%= route_url %>
|
|
30
|
+
def create
|
|
31
|
+
@<%= singular_table_name %> = <%= orm_class.build(class_name, "#{singular_table_name}_params") %>
|
|
32
|
+
@<%= singular_table_name %>.<%= parent_singular_table_name %> = @<%= parent_singular_table_name %>
|
|
33
|
+
if @<%= orm_instance.save %>
|
|
34
|
+
redirect_to <%= parent_singular_table_name %>_<%= singular_table_name %>_path(@<%= parent_singular_table_name %>, @<%= singular_table_name %>), notice: <%= "'#{human_name} was successfully created.'" %>
|
|
35
|
+
else
|
|
36
|
+
render action: 'new'
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# PATCH/PUT <%= route_url %>/1
|
|
41
|
+
def update
|
|
42
|
+
if @<%= orm_instance.update("#{singular_table_name}_params") %>
|
|
43
|
+
redirect_to <%= parent_singular_table_name %>_<%= singular_table_name %>_path(@<%= parent_singular_table_name %>, @<%= singular_table_name %>), notice: <%= "'#{human_name} was successfully updated.'" %>
|
|
44
|
+
else
|
|
45
|
+
render action: 'edit'
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# DELETE <%= route_url %>/1
|
|
50
|
+
def destroy
|
|
51
|
+
@<%= orm_instance.destroy %>
|
|
52
|
+
redirect_to <%= parent_singular_table_name %>_<%= plural_table_name %>_path(@<%= parent_singular_table_name %>), notice: <%= "'#{human_name} was successfully destroyed.'" %>
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
private
|
|
56
|
+
# Use callbacks to share common setup or constraints between actions.
|
|
57
|
+
def set_<%= singular_table_name %>
|
|
58
|
+
@<%= singular_table_name %> = <%= orm_class.find(class_name, "params[:id]") %>
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# Use callbacks to share common setup or constraints between actions.
|
|
62
|
+
def set_<%= parent_name.tableize.singularize %>
|
|
63
|
+
@<%= parent_name.tableize.singularize %> = <%= orm_class.find(parent_name, "params[:" + parent_name.tableize.singularize + "_id]") %>
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# Only allow a trusted parameter "white list" through.
|
|
67
|
+
def <%= "#{singular_table_name}_params" %>
|
|
68
|
+
<%- if attributes_names.empty? -%>
|
|
69
|
+
params[:<%= singular_table_name %>]
|
|
70
|
+
<%- else -%>
|
|
71
|
+
params.require(:<%= singular_table_name %>).permit(<%= attributes_names.map { |name| ":#{name}" }.join(', ') %>)
|
|
72
|
+
<%- end -%>
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
<% end -%>
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
<%%= form_for([@<%= parent_singular_table_name %>, @<%= singular_table_name %>]) do |f| %>
|
|
2
|
+
<%% if @<%= singular_table_name %>.errors.any? %>
|
|
3
|
+
<div id="error_explanation">
|
|
4
|
+
<h2><%%= pluralize(@<%= singular_table_name %>.errors.count, "error") %> prohibited this <%= singular_table_name %> from being saved:</h2>
|
|
5
|
+
|
|
6
|
+
<ul>
|
|
7
|
+
<%% @<%= singular_table_name %>.errors.full_messages.each do |msg| %>
|
|
8
|
+
<li><%%= msg %></li>
|
|
9
|
+
<%% end %>
|
|
10
|
+
</ul>
|
|
11
|
+
</div>
|
|
12
|
+
<%% end %>
|
|
13
|
+
|
|
14
|
+
<% attributes.each do |attribute| -%>
|
|
15
|
+
<div class="field">
|
|
16
|
+
<% if attribute.password_digest? -%>
|
|
17
|
+
<%%= f.label :password %><br>
|
|
18
|
+
<%%= f.password_field :password %>
|
|
19
|
+
</div>
|
|
20
|
+
<div>
|
|
21
|
+
<%%= f.label :password_confirmation %><br>
|
|
22
|
+
<%%= f.password_field :password_confirmation %>
|
|
23
|
+
<% else -%>
|
|
24
|
+
<%- if attribute.reference? -%>
|
|
25
|
+
<%%= f.label :<%= attribute.column_name %> %><br>
|
|
26
|
+
<%%= f.<%= attribute.field_type %> :<%= attribute.column_name %> %>
|
|
27
|
+
<%- else -%>
|
|
28
|
+
<%%= f.label :<%= attribute.name %> %><br>
|
|
29
|
+
<%%= f.<%= attribute.field_type %> :<%= attribute.name %> %>
|
|
30
|
+
<%- end -%>
|
|
31
|
+
<% end -%>
|
|
32
|
+
</div>
|
|
33
|
+
<% end -%>
|
|
34
|
+
<div class="actions">
|
|
35
|
+
<%%= f.submit %>
|
|
36
|
+
</div>
|
|
37
|
+
<%% end %>
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<h1>Editing <%= singular_table_name %></h1>
|
|
2
|
+
|
|
3
|
+
<%%= render 'form' %>
|
|
4
|
+
|
|
5
|
+
<%%= link_to 'Show', <%= parent_singular_table_name %>_<%= singular_table_name %>_path(@<%= parent_singular_table_name %>, @<%= singular_table_name %>) %> |
|
|
6
|
+
<%%= link_to 'Back', <%= parent_singular_table_name %>_<%= plural_table_name %>_path(@<%= parent_singular_table_name %>) %>
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
<h1>Listing <%= plural_table_name %></h1>
|
|
2
|
+
|
|
3
|
+
<table>
|
|
4
|
+
<thead>
|
|
5
|
+
<tr>
|
|
6
|
+
<% attributes.reject(&:password_digest?).each do |attribute| -%>
|
|
7
|
+
<th><%= attribute.human_name %></th>
|
|
8
|
+
<% end -%>
|
|
9
|
+
<th colspan="3"></th>
|
|
10
|
+
</tr>
|
|
11
|
+
</thead>
|
|
12
|
+
|
|
13
|
+
<tbody>
|
|
14
|
+
<%% @<%= plural_table_name %>.each do |<%= singular_table_name %>| %>
|
|
15
|
+
<tr>
|
|
16
|
+
<% attributes.reject(&:password_digest?).each do |attribute| -%>
|
|
17
|
+
<td><%%= <%= singular_table_name %>.<%= attribute.name %> %></td>
|
|
18
|
+
<% end -%>
|
|
19
|
+
<td><%%= link_to 'Show', <%= parent_singular_table_name %>_<%= singular_table_name %>_path(@<%= parent_singular_table_name %>, <%= singular_table_name %>) %></td>
|
|
20
|
+
<td><%%= link_to 'Edit', edit_<%= parent_singular_table_name %>_<%= singular_table_name %>_path(@<%= parent_singular_table_name %>, <%= singular_table_name %>) %></td>
|
|
21
|
+
<td><%%= link_to 'Destroy', <%= parent_singular_table_name %>_<%= singular_table_name %>_path(@<%= parent_singular_table_name %>, <%= singular_table_name %>), method: :delete, data: { confirm: 'Are you sure?' } %></td>
|
|
22
|
+
</tr>
|
|
23
|
+
<%% end %>
|
|
24
|
+
</tbody>
|
|
25
|
+
</table>
|
|
26
|
+
|
|
27
|
+
<br>
|
|
28
|
+
|
|
29
|
+
<%%= link_to 'New <%= human_name %>', new_<%= parent_singular_table_name %>_<%= singular_table_name %>_path(@<%= parent_singular_table_name %>) %>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<p id="notice"><%%= notice %></p>
|
|
2
|
+
|
|
3
|
+
<% attributes.reject(&:password_digest?).each do |attribute| -%>
|
|
4
|
+
<p>
|
|
5
|
+
<strong><%= attribute.human_name %>:</strong>
|
|
6
|
+
<%%= @<%= singular_table_name %>.<%= attribute.name %> %>
|
|
7
|
+
</p>
|
|
8
|
+
|
|
9
|
+
<% end -%>
|
|
10
|
+
<%%= link_to 'Edit', edit_<%= parent_singular_table_name %>_<%= singular_table_name %>_path(@<%= parent_singular_table_name %>, @<%= singular_table_name %>) %> |
|
|
11
|
+
<%%= link_to 'Back', <%= parent_singular_table_name %>_<%= plural_table_name %>_path(@<%= parent_singular_table_name %>) %>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
= form_for [@<%= parent_singular_table_name %>, @<%= singular_table_name %>] do |f|
|
|
2
|
+
- if @<%= singular_table_name %>.errors.any?
|
|
3
|
+
#error_explanation
|
|
4
|
+
%h2= "#{pluralize(@<%= singular_table_name %>.errors.count, "error")} prohibited this <%= singular_table_name %> from being saved:"
|
|
5
|
+
%ul
|
|
6
|
+
- @<%= singular_table_name %>.errors.full_messages.each do |msg|
|
|
7
|
+
%li= msg
|
|
8
|
+
|
|
9
|
+
<% for attribute in attributes -%>
|
|
10
|
+
.field
|
|
11
|
+
= f.label :<%= attribute.name %>
|
|
12
|
+
= f.<%= attribute.field_type %> :<%= attribute.name %>
|
|
13
|
+
<% end -%>
|
|
14
|
+
.actions
|
|
15
|
+
= f.submit 'Save'
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
%h1
|
|
2
|
+
Editing <%= singular_table_name %>
|
|
3
|
+
= render 'form'
|
|
4
|
+
|
|
5
|
+
= link_to 'Show', <%= parent_singular_table_name %>_<%= singular_table_name %>_path(@<%= parent_singular_table_name %>, @<%= singular_table_name %>)
|
|
6
|
+
= " | "
|
|
7
|
+
= link_to 'Back', <%= parent_singular_table_name %>_<%= plural_table_name %>_path(@<%= parent_singular_table_name %>)
|