最後整理的方式再来讲到 Rails 提供功能,主要目的在把相同逻辑 code 整理在一起,需要使用的时候再 include 近来即可使用,有点类似继承的概念,但又不想要所有东西都继承起来。或许会发生有一两个特别的不需要使用到,这时候就可以使用 Concern 来处理。
用途主要在:
app > controllers > concerns > users_concern.rb
module / concern 两种写法的定义都相同,看习惯写成什麽样子都可以,我个人常看到的是 module + included。
# definition(1)
module UserConcern
extend ActiveSupport::Concern
def self.included(base)
base.instance_eval do
scope :some_thing_scope, -> {...}
has_many :table
end
# or
# base.class_eval do
# ...
# end
end
#or
included do
#...
end
end
# definition(2)
concern UserConcern do
...
end
看完上述的写法,以 user controller 整理举例:
# frozen_string_literal: true
module UserConcern
extend ActiveSupport::Concern
# render_404_if_user_id_invalid in here
include ValidateParams
included do
before_action -> { render_404_if_user_id_invalid(params[:id]) }
before_action :set_basic_user_instances
end
def set_basic_user_instances
@some_instances = ...
# ...
end
end
class UserController < ApplicationController
include UserConcern
# ...
end
而相同的,model 也可以用相同的方法整理再一起,这边也不另外举例了。
此时此刻看着这篇文章的你,是否也遇到下图的错误讯息,反覆检查程序码,也确实参照官方文件1、官方文件2...
Virtual Judge ZeroJudge 题意 输入一整数,判断是否为 11 的倍数 需要注...
前情提要 关於cog,当指令越写越多的时候,可以运用Cog的架构。 Cog可以视为一个extensi...
进度 : 鸟哥的 Linux 私房菜 -- 第六章、Linux 档案与目录管理 快速查询对应 ASC...
最近,我偶然发现了一个软件,"Visited",一个建立在Node.js上的开源...