如果你遵循严格的REST/嵌套资源方法来构建你的Rails应用,你可能会厌倦重复常见的控制器操作。
试试Scoped concern模式:这是一个放置共享代码(设置变量、授权)和精简控制器的地方。
使用方法
这种特殊的模式来自DHH和Basecamp--一个以使用大量微小的关注点来共享行为而自豪的代码库。
虽然重复使用相同的before_actions来查找Channel ,这本身就是一个很好的好处,但Scoped 的命名惯例是一个很好的、鲜明的名字。播放列表是 "范围 "在一个频道上的,所以相应的控制器是 "频道范围 "的,这是完全合理的:
module ChannelScoped
extend ActiveSupport::Concern
included do
before_action :set_channel, :authorize_channel
end
private
def set_channel
@channel = Channel.find(params[:channel_id])
end
def authorize_channel
authorize @channel # check that user has access, etc
end
end
class Channels::SubscriptionsController < ApplicationController
include ChannelScoped
end
class Channels::VideosController < ApplicationController
include ChannelScoped
end
class Channels::PlaylistsController < ApplicationController
include ChannelScoped
end