2017-06-22 32 views
0

我有3個車型導軌 - 顯示關係數據,但在條件

  1. 作業(belongs_to :hiring_procedure
  2. 僱用程序(has_many :jobs, has_many :hiring_procedure_stages
  3. 僱用操作階段(belongs_to :hiring_procedure

這意味着在我正在展示工作的視圖內,我可以訪問不同的招聘階段,以下工作正常。

job.hiring_procedure.hiring_procedure_stages 

我的問題是,上面的代碼將返回所有階段,如果我只想階段,其中模型hiring_procedure_stagedeleted列是f

我在下拉菜單實際顯示不同階段的用戶選擇,我不希望用戶看到被刪除的階段(刪除方法就是刪除值t的模型hiring_procedure_stage,它是一個布爾值)

<%= select_tag 
    'application_stage', 
    options_for_select(
    job.hiring_procedure.hiring_procedure_stages.map{ |p|[p.name, p.id] }, 
    hiring_procedure_stage_id 
),%> 

有沒有辦法在視圖中實現這一點,或者更好地將此邏輯放在控制器內部的另一個變量中,並訪問該視圖?

回答

2

hiring_procedure_stage.rb模型

scope :active, -> { where(deleted: false) } 

創建範圍,現在你可以使用上面的範圍爲:

job.hiring_procedure.hiring_procedure_stages.active 

這隻會返回您hiring_procedure_stages其中deleted is false

+0

美麗,非常感謝。 – Saadia

2

另一種方法是定義與012範圍的關係,所以它會總是考慮沒有刪除的階段。

範圍所以添加到關聯:

class HiringProcedure < ApplicationRecord 
    has_many :hiring_procedure_stages, -> { where(deleted: false) } 
end 

而且每次使用

hiring_procedure.hiring_procedure_stages 

你會得到未刪除的所有階段。

當然,只有在您永遠不會嘗試獲取已刪除的階段時,才推薦使用此解決方案。

+0

謝謝,這也是一個很好的解決方案。 – Saadia