I create new Rails application with --api parameter, like on manual http://edgeguides.rubyonrails.org/api_app.html
rails new app2 --api
For scaffold I use
bin/rails generate scaffold People first_name:string last_name:string age:integer
And Rails generate controller with not only actions for json result, and don't need "new" and "edit" actions, and html rendering
Also it generates
create app/views/people
create app/views/people/index.html.erb
create app/views/people/edit.html.erb
create app/views/people/show.html.erb
create app/views/people/new.html.erb
create app/views/people/_form.html.erb
that I don't need, because I need only API
Why?
I want to receive result, like I use rails-api gem
Version of Rails is 4.2.5
If you just want to generate model and controller, you can use:
bin/rails generate resource People first_name:string last_name:string age:integer
I found answer. "--api" command is only for 5.0 Rails
Related
I am learning to build a Rails API app with the 6.1 version. I created a rails app in the following way
rails new book-gallery --api --mysql
The app created successfully. I proceeded next doing the following
rails g scaffold Author name:string country:string
This created the controller and model with the crud. But I want API to be versioned instead
Requirement:
/v1/authors
If I pass versioning on the scaffold, the model is also getting versioned which should not be
rails g scaffold v1/Author name:string country:string
The controller path is correct, but the model I got v1.rb and folder of name v1.
I don't need versioning in the model, I am trying to keep it as author.rb
Any guidance will be grateful.
Thank you
You can't achieve what you want with 1 command.
You could do a scaffold_controller and create the model without scaffolding:
rails g model Author name country
rails g scaffold_controller v1/Author
You can also skip the :string for the model attributes. Without given the datatype it will set it to string by default.
Hi I want to delete all stuff related to rails generate scaffold at once.
You can use this command and enjoying......
rails destroy scaffold scaffoldname
scaffold name = The name of generated scaffold which you generate..
rails d scaffold yourscaffoldname
(In your terminal)
My setup: Rails 3.0.9, Ruby 1.9.2
I wish to generate a scaffold only for the create action, what's the syntax for that? I'm guessing it's something I append to
rails g scaffold Project name:string ...
I don't believe you can. I'm looking at the generator and I see nothing related to using an option to limit the template.
Generator
Template
Rails scaffolding is a very basic tool, it's not meant to be relied on, once you get a handle on the way rails works. However, you can use Ryan Bates' nifty-generator gem to generate scaffolds with greater control. Example:
rails g nifty:scaffold post name:string index new edit
Learn more here. https://github.com/ryanb/nifty-generators
I'm new to Rails so my current project is in a weird state.
One of the first things I generated was a "Movie" model. I then started defining it in more detail, added a few methods, etc.
I now realize I should have generated it with rails generate scaffold to hook up things like the routing, views, controller, etc.
I tried to generate the scaffolding but I got an error saying a migration file with the same name already exists.
What's the best way for me to create scaffolding for my "Movie" now? (using rails 3)
TL;DR: rails g scaffold_controller <name>
Even though you already have a model, you can still generate the necessary controller and migration files by using the rails generate option. If you run rails generate -h you can see all of the options available to you.
Rails:
controller
generator
helper
integration_test
mailer
migration
model
observer
performance_test
plugin
resource
scaffold
scaffold_controller
session_migration
stylesheets
If you'd like to generate a controller scaffold for your model, see scaffold_controller. Just for clarity, here's the description on that:
Stubs out a scaffolded controller and its views. Pass the model name,
either CamelCased or under_scored, and a list of views as arguments.
The controller name is retrieved as a pluralized version of the model
name.
To create a controller within a module, specify the model name as a
path like 'parent_module/controller_name'.
This generates a controller class in app/controllers and invokes helper,
template engine and test framework generators.
To create your resource, you'd use the resource generator, and to create a migration, you can also see the migration generator (see, there's a pattern to all of this madness). These provide options to create the missing files to build a resource. Alternatively you can just run rails generate scaffold with the --skip option to skip any files which exist :)
I recommend spending some time looking at the options inside of the generators. They're something I don't feel are documented extremely well in books and such, but they're very handy.
Great answer by Lee Jarvis, this is just the command e.g; we already have an existing model called User:
rails g scaffold_controller User
For the ones starting a rails app with existing database there is a cool gem called schema_to_scaffold to generate a scaffold script.
it outputs:
rails g scaffold users fname:string lname:string bdate:date email:string encrypted_password:string
from your schema.rb our your renamed schema.rb. Check it
In Rails 5, you can still run
$rails generate scaffold movie --skip
to create all the missing scaffold files or
rails generate scaffold_controller Movie
to create the controller and view only.
For a better explanation check out rails scaffold
This command should do the trick:
$ rails g scaffold movie --skip
You can make use of scaffold_controller and remember to pass the attributes of the model, or scaffold will be generated without the attributes.
rails g scaffold_controller User name email
# or
rails g scaffold_controller User name:string email:string
This command will generate following files:
create app/controllers/users_controller.rb
invoke haml
create app/views/users
create app/views/users/index.html.haml
create app/views/users/edit.html.haml
create app/views/users/show.html.haml
create app/views/users/new.html.haml
create app/views/users/_form.html.haml
invoke test_unit
create test/controllers/users_controller_test.rb
invoke helper
create app/helpers/users_helper.rb
invoke test_unit
invoke jbuilder
create app/views/users/index.json.jbuilder
create app/views/users/show.json.jbuilder
I had this challenge when working on a Rails 6 API application in Ubuntu 20.04.
I had already existing models, and I needed to generate corresponding controllers for the models and also add their allowed attributes in the controller params.
Here's how I did it:
I used the rails generate scaffold_controller to get it done.
I simply ran the following commands:
rails generate scaffold_controller School name:string logo:json motto:text address:text
rails generate scaffold_controller Program name:string logo:json school:references
This generated the corresponding controllers for the models and also added their allowed attributes in the controller params, including the foreign key attributes.
create app/controllers/schools_controller.rb
invoke test_unit
create test/controllers/schools_controller_test.rb
create app/controllers/programs_controller.rb
invoke test_unit
create test/controllers/programs_controller_test.rb
That's all.
I hope this helps
I am trying to generate a controller with all the RESTful actions stubbed. I had read at Wikibooks - Ruby on Rails that all I needed to do was to call the generator with the controller name and I would get just that. So, I ran script/generate rspec_controller Properties but got an empty controller.
Any other suggestions would be greatly appreciated.
I don't know about an automated way of doing it, but if you do:
script/generate controller your_model_name_in_plural new create update edit destroy index show
All of them will be created for you
Update for Rails 4
rails g scaffold_controller Property
In Rails 3 there is also rails generate scaffold_controller .... More info here.
EDIT(due to some comments) : Original question was in 2010 - hence the answer is NOT for RAILS 4 , but for rails 2!!
try using scaffolding.
script/generate scaffold controller Properties
Section of Official docs on Ruby On Rails
I'm sure you can find more info if you do a google search on rails scaffolding. Hope that helps.
EDIT:
For RAILS 4
rails g scaffold_controller Property
In Rails 4/5 the following command does the trick for me.
rails g scaffold_controller Property --skip-template-engine
It generated the controller actions but not the view.
Rails 5.1
Starting point:
You have created a model without a controller, nor views (eg thru: rails generate model category)
Objective:
Upgrade it to a full RESTful resource
Command:
rails generate scaffold_controller category
It stubs out a scaffolded controller, its seven RESTful actions and related views. (Note: You can either pass the model name CamelCased or under_scored.)
Output:
varus#septimusSrv16DEV4:~/railsapps/dblirish$ rails generate scaffold_controller category
Running via Spring preloader in process 45681
create app/controllers/categories_controller.rb
invoke erb
create app/views/categories
create app/views/categories/index.html.erb
create app/views/categories/edit.html.erb
create app/views/categories/show.html.erb
create app/views/categories/new.html.erb
create app/views/categories/_form.html.erb
invoke test_unit
create test/controllers/categories_controller_test.rb
invoke helper
create app/helpers/categories_helper.rb
invoke test_unit
invoke jbuilder
create app/views/categories/index.json.jbuilder
create app/views/categories/show.json.jbuilder
create app/views/categories/_category.json.jbuilder
You're looking for scaffolding.
Try:
script/generate scaffold Property
This will give you a controller, a model, a migration and related tests. You can skip the migration with the option --skip-migration. If you don't want the others, you'll have to delete them yourself. Don't worry about overwriting existing files, that won't happen unless you use --force.
As klew points out in the comments, this also defines the method bodies for you, not just the names. It is very helpful to use as a starting point for your REST controller.
In Rails 4 it's rails g controller apps new create update edit destroy show index
Or rails generate controller apps new create update edit destroy show index if you want to write out the full term :).
script/generate rspec_scaffold Property
There's no way (that I know of? that is documented?) to stub out a controller except through scaffolding. But you could do:
script/generate controller WhateverController new create edit update destroy show
One solution is to create a script that accepts one parameter, the controller name, and let the script type the whole command for you.
Create a new file, say, railsgcontroller
Make it executable and save it on path
Run it like:
$ railsgcontroller Articles
die () {
echo "Please supply new rails controller name to generate."
echo >&2 "$#"
exit 1
}
[ "$#" -eq 1 ] || die "1 argument required, $# provided"
rails g controller "$1" new create update edit destroy show index