Rails 里面的 merge

__ 所有的代碼直接手?jǐn)]悯仙、沒(méi)有驗(yàn)證過(guò) 直接在 MarkDown 里寫的 QAQ __

有一些編碼風(fēng)格 & APi設(shè)計(jì)的時(shí)候嵌套風(fēng)格 & APi錯(cuò)誤處理風(fēng)格夾雜在其中

待完善

背景模型

# 團(tuán)隊(duì) - 擁有團(tuán)隊(duì)的項(xiàng)目 & 團(tuán)隊(duì)的成員
# 用戶 - 有可以訪問(wèn)的多個(gè)項(xiàng)目
# 項(xiàng)目 - 歸屬于某個(gè)團(tuán)隊(duì) & 項(xiàng)目有很多的成員
# 訪問(wèn) - 用來(lái)記錄用戶 & 項(xiàng)目之間的權(quán)限

class Team < ApplicationRecord
  has_many :users
  has_many :projects
end

class User < ApplicationRecord
  has_many   :teams
  has_many   :accesses
  has_many   :projects, through: :accesses               # 這里就是用戶能訪問(wèn)的項(xiàng)目
end

class Profile < ApplicationRecord
  self.table_name = "user_profile"
  has_one :user
end

class Access < ApplicationRecord
  belongs_to :project
  belongs_to :user
end

class Project < ApplicationRecord
  belongs_to :team
  has_many   :accesses
  has_many   :members, through: :accesses, source: 'user' # 項(xiàng)目有很多成員
end

合并復(fù)雜查詢

  • 需求: 查詢 當(dāng)前用戶 在 當(dāng)前團(tuán)隊(duì) 的 所有有權(quán)限訪問(wèn) 的項(xiàng)目

class BaseController < ApplicationController
  before_action : current_user
  
  def current_user
    @current_user ||= User.first
  end
end

module Teams
  class BaseController < ::BaseController
    before_action :current_team
     
    def current_team
      @current_team ||= User.first
    end
  end
end

module Teams
  class ProjectsController < BaseController
    def index
      @projects = @current_team.projects.merge(@current_user.projects)
    end
  end
end
  • 需求: 根據(jù) Profile 里面記錄的生日 對(duì)用戶進(jìn)行排序
class UsersController < BaseController 
  def index
    #where 屬于亂入 & 這里是一些比較常見(jiàn)的寫法
    #@users = User.joins(:profile).where("user_profile.address LIKE ?", 'HANG').order("user_profile.birth_day")
    users = load_users
  end
  
  private
  def load_users
    users = User.includes(:profile).joins(:profile).merge(Profile.order(:birth_day))
    raise ErrorOnUsersControllerIndexMethod unless users
    return users
  end

end
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子俐填,更是在濱河造成了極大的恐慌,老刑警劉巖橙数,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件激况,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡淀衣,警方通過(guò)查閱死者的電腦和手機(jī)昙读,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)膨桥,“玉大人蛮浑,你說(shuō)我怎么就攤上這事≈幌” “怎么了沮稚?”我有些...
    開(kāi)封第一講書人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)册舞。 經(jīng)常有香客問(wèn)我蕴掏,道長(zhǎng),這世上最難降的妖魔是什么调鲸? 我笑而不...
    開(kāi)封第一講書人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任盛杰,我火速辦了婚禮,結(jié)果婚禮上藐石,老公的妹妹穿的比我還像新娘即供。我一直安慰自己,他們只是感情好于微,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布逗嫡。 她就那樣靜靜地躺著青自,像睡著了一般。 火紅的嫁衣襯著肌膚如雪祸穷。 梳的紋絲不亂的頭發(fā)上性穿,一...
    開(kāi)封第一講書人閱讀 52,441評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音雷滚,去河邊找鬼需曾。 笑死,一個(gè)胖子當(dāng)著我的面吹牛祈远,可吹牛的內(nèi)容都是我干的呆万。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼车份,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼谋减!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起扫沼,我...
    開(kāi)封第一講書人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤出爹,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后缎除,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體严就,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年器罐,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了梢为。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡轰坊,死狀恐怖铸董,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情肴沫,我是刑警寧澤粟害,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站樊零,受9級(jí)特大地震影響我磁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜驻襟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一夺艰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧沉衣,春花似錦郁副、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)拔疚。三九已至,卻和暖如春既荚,著一層夾襖步出監(jiān)牢的瞬間稚失,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工恰聘, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留句各,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓晴叨,卻偏偏與公主長(zhǎng)得像凿宾,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子兼蕊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,303評(píng)論 25 707
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理初厚,服務(wù)發(fā)現(xiàn),斷路器孙技,智...
    卡卡羅2017閱讀 134,704評(píng)論 18 139
  • 昨晚心血來(lái)潮看了電影《奇怪的她》产禾。 壞脾氣的老太太吳末順經(jīng)營(yíng)一家專門服務(wù)于老年人的咖啡店,由于性格霸道牵啦,尖酸刻薄下愈,...
    請(qǐng)叫我Han先森閱讀 7,784評(píng)論 0 1
  • 事情都是源自江里浮上來(lái)的一口棺材…… 撬開(kāi)了這副棺材之后,就開(kāi)始覺(jué)得有個(gè)不干凈的東西跟著我到了家里蕾久,女兒變得越來(lái)越...
    萬(wàn)畫筒漫畫萬(wàn)二閱讀 285評(píng)論 0 0
  • 望蘭亭,觀岸角拌夏, 山遠(yuǎn)霧纏繞僧著。 柳葉稀疏, 荷瘦也衰倒障簿。 蒼穹遍野荒蕪盹愚, 孤身獨(dú)佇, 看歸路站故、依然飄渺皆怕。 可知道,...
    龍之風(fēng)閱讀 272評(píng)論 3 12