📜  Ruby on Rails面试问题(1)

📅  最后修改于: 2023-12-03 15:04:56.838000             🧑  作者: Mango

Ruby on Rails 面试问题

介绍

Ruby on Rails (RoR) 是一种使用 Ruby 编程语言的开源网络应用程序框架。它遵循了 Model-View-Controller (MVC) 设计模式,提供了丰富的工具和库,使得开发人员可以快速创建直观的和高效的 Web 应用程序。Ruby on Rails 的核心理念是 "Convention over Configuration",即它提供的默认配置可以让开发人员更快地开始工作,并提高开发人员的生产力。在 Ruby on Rails 中,开发人员不需要编写大量的底层代码和配置文件,可以更专注于业务逻辑和应用程序的核心功能。

面试问题

面试 Ruby on Rails 开发人员时,可以问以下问题:

  1. RoR 中的 ActiveRecord 是什么?它的作用是什么?
  2. 什么是 Scaffold?为什么它在 RoR 开发中很有用?
  3. Controller 和 Action 之间的区别是什么?
  4. 什么是 Callback?RoR 中的 Callback 有哪些种类?
  5. 请解释 before_save 和 before_validation 的区别。
  6. RoR 中的 asset pipeline 是什么?它的作用是什么?
  7. 可以在哪些地方定义局部变量?Ruby on Rails 中全局变量的定义方式是什么?
  8. Rails 中的 RESTful 路由是什么?它的作用是什么?举例说明。
  9. 什么是 CSRF?在 RoR 中如何防止 CSRF 攻击?
  10. 如何在 RoR 中实现用户身份验证?它有哪些组件和库?
代码片段

以下是 Ruby on Rails 中常用的代码片段:

  1. ActiveRecord 示例:
class User < ActiveRecord::Base
  has_many :articles
end

class Article < ActiveRecord::Base
  belongs_to :user
end
  1. Scaffold 示例:
rails g scaffold Article title:string content:text user:references
  1. Controller 和 Action 示例:
class ArticlesController < ApplicationController
  def index
    @articles = Article.all
  end

  def show
    @article = Article.find(params[:id])
  end

  def new
    @article = Article.new
  end

  def create
    @article = Article.new(article_params)
    if @article.save
      redirect_to @article
    else
      render 'new'
    end
  end

  private
    def article_params
      params.require(:article).permit(:title, :content, :user_id)
    end
end
  1. Callback 示例:
class Article < ActiveRecord::Base
  before_save :set_slug

  private
    def set_slug
      self.slug = title.parameterize
    end
end
  1. RESTful 路由示例:
resources :articles
  1. 用户身份验证示例:
class ApplicationController < ActionController::Base
  before_action :authenticate_user!

  private
    def authenticate_user!
      unless current_user
        redirect_to new_session_path
      end
    end

    def current_user
      @current_user ||= User.find_by(id: session[:user_id])
    end
end