Смущены тем, как рельсы находят действия, которых нет в текущем контроллере? - PullRequest
0 голосов
/ 10 марта 2020

Это может быть глупый вопрос, пожалуйста, прости меня. Я новичок в 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

1 Ответ

0 голосов
/ 11 марта 2020

Если это вариант RailsTutorial, , который выглядит здесь , я думаю, что метод log_in определен в помощнике с именем SessionsHelper в app/helpers/sessions_helper.rb, который выглядит примерно так :

module SessionsHelper

  # Logs in the given user
  def log_in(user)
    session[:user_id] = user.id
  end
end

Помощники автоматически включаются в контроллеры, а методы publi c в помощниках доступны как для контроллера, так и для представления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...