Это может быть глупый вопрос, пожалуйста, прости меня. Я новичок в Rails, и я Google, как найти действия, которые не включены в текущий контроллер, но не мог понять это. Я заметил, что Rails следует за наследованием c. Я не понимаю, как rails находит метод 'log_in' при создании действия? Поскольку я не включил действие log_in в текущий пользовательский контроллер и ни в контроллер user_helper, ни в контроллер application_helper, rails вообще не должен находить это действие. Есть ли соглашение, что рельсы найдут действие в других местах?
1. Это нормально, мой user_controller.rb
class UsersController < ApplicationController
before_action :set_user, only: [:show, :edit, :update, :destroy]
before_action :require_login, except:[:new, :create]
# GET /users
# GET /users.json
def index
@users = User.all
end
# GET /users/1
# GET /users/1.json
def show
@user = current_user
end
# GET /users/new
def new
@user = User.new
end
# GET /users/1/edit
def edit
end
# POST /users
# POST /users.json
def create
@user = User.new(user_params)
respond_to do |format|
if @user.save
log_in(@user)
puts @user
puts session[:user_id]
format.html { redirect_to @user, notice: 'User was successfully created.' }
format.json { render :show, status: :created, location: @user }
else
format.html { render :new }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
2. Это мое application_helper.rb
module ApplicationHelper
end
3. Это мой users_helper.rb
module UsersHelper
end
4. Это мой application_controller.rb
class ApplicationController < ActionController::Base
before_action :require_login
def require_login
if !logged_in?
redirect_to login_path
end
end
end