First of all, I would like to review the flow of device introduction (what I did) and let me remember it here. Since I am a beginner, please contact me each time if you tell me something wrong.
First, an overview of the device, this is a gem for implementing user management functionality. You can easily implement new registration and login / logout.
Let's edit the Gemfile
gem 'devise'(Let's add to the last line)
You can now work with your device locally, in test, and in production.
After installing Gem, restart the local server running in the terminal once. This is because the timing of reflecting the installed Gem is when the server starts.
In order to use devise, in addition to installing Gem, it is necessary to create a configuration file with a command dedicated to devise. Let's create a file with this command
% rails g devise:install
Success when the following log flows!
create config/initializers/devise.rb
create config/locales/devise.en.yml
===============================================================================
Depending on your application's configuration some manual setup may be required:
1. Ensure you have defined default url options in your environments files. Here
is an example of default_url_options appropriate for a development environment
in config/environments/development.rb:
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
In production, :host should be set to the actual host of your application.
* Required for all applications. *
2. Ensure you have defined root_url to *something* in your config/routes.rb.
For example:
root to: "home#index"
* Not required for API-only Applications *
3. Ensure you have flash messages in app/views/layouts/application.html.erb.
For example:
<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>
* Not required for API-only Applications *
4. You can copy Devise views (for customization) to your app by running:
rails g devise:views
* Not required *
===============================================================================
When using devise, it is necessary to create a new User model for creating an account. To create it, create a User model with devise's model creation command instead of the usual model creation method. You can generate the model, its accompanying migration file, and routing settings all at once with the following command. The paths related to devise are added to routes.rb.
rails g devise user
Success in the following log
invoke active_record
create db/migrate/20200309082300_devise_create_users.rb
create app/models/user.rb
invoke test_unit
create test/models/user_test.rb
create test/fixtures/users.yml
insert app/models/user.rb
route devise_for :users
In addition, the following routes are automatically added to routes.rb.
Rails.application.routes.draw do
devise_for :users
root to: 'tweets#index'
resources :tweets
end
devise_for is a devise method that generates multiple routes required for user functions at once.
Since the migration file was also generated by the previous command, migrate it.
rails db:migrate
The table has been created here.
** Since the information in the table has been changed (migrated), let's restart the local server when starting it. ** **
When you implement the login function in devise, the login / sign-up screen is automatically generated, but it is not generated as a view file. This is because we are loading a view file that exists inside the devise Gem.
In order to make changes to the devise view file, you need to use the devise command to generate the view file.
Run the command to create a view for devise
% rails g devise:views
Edit the view of the login screen and the view file of the new registration screen created here to create the appearance.
This completes the basic installation of device. I'm aware that if it's simple, it's okay here, but Also used in devise
rails g devise:contoroller users
There is. I would like to summarize how to use it in another article below. (Because I don't understand the required standards)
The information you enter when signing up is sent to the server as a parameter. For normal requests without devise, we wrote strong parameters in the controller to limit the parameters that could be received.
For devise, write strong parameters in the controller as well. However, the controller that handles devise is described in the Gem, so it cannot be edited. Also, if you implement the login function with devise, in addition to params, you will also receive parameters that are different from params.
From the above, we need a method to reflect strong parameters in the devise controller and a method to acquire devise-specific parameters.
Methods like params in devise. Parameters can be obtained from requests such as "login" and "new registration" related to devise's User model.
By combining this method with the permit method, you can also specify and include newly added columns for the strong parameters defined in devise.
The devise_parameter_sanitizer method is used in the newly defined private method like the previous strong parameters. Since the provider of devise introduces the newly defined method name as configure_permitted_parameters, it is customary to define it with this method name.
private
def configure_permitted_parameters #Method names are customary
#Allow parameters for devise User model
devise_parameter_sanitizer.permit(:devise process name, keys: [:Keys to allow])
end
devise permit adds parameters to allow by specifying the key in the array for the key of devise processing name in the first argument and keys in the second argument.
For the process name of the first argument, sign_in, sign_up, account_update that have already been set in devise can be used, and they correspond to the processes at the time of sign-in, sign-up, and account information update, respectively.
Process name role
:sign_in When signing in (login)
:sign_up When performing sign-up (new registration) processing
:account_update When processing account information update
Write these descriptions in ** application_controller.rb **.
app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
before_action :configure_permitted_parameters, if: :devise_controller?
private
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname])
end
end
Notice that we are using an option called if in before_action. By specifying the method name in the value, it is set to execute the process only when the return value is true.
This time, I specified the helper method name of devise: devise_controller?, And if it is the processing of the controller related to devise, it is set to execute the configure_permitted_parameters method only at that time. Even if the process is read by other tweets controller etc., it is not executed.
rails g migration command
A command to generate a migration. The migration was previously generated with the model with the rails g model command, but it is used when changing the contents of an already created table.
This command automatically describes what kind of table operation to perform according to the name of the specified file.
rails g migration Add Column name To Add destination table name By setting the column name to be added: type, migration is generated with the code required to add a column to the table written.
The snake case and camel case each represent how to separate words.
Snake cases represent word breaks with underscores Camelcase capitalizes word breaks When words of variable name or function name are consecutive, there are several ways to separate the words. See the table below.
Notation method Explanation example
Camelcase adminUserCommentCreator with lowercase letters and uppercase word delimiters
Upper camel case One of the camel cases. AdminUserCommentCreator that capitalizes word delimiters from the beginning
Snake case Underscore word break admin_user_comment_creator
As a customary naming convention for Rails, use it properly as follows.
Target of naming Customary naming conventions
Class name upper camel case
Method name snake case
Variable name snake case
Observe these naming conventions when creating your own classes and methods.
Recommended Posts