2016-08-30 40 views
0

我希望我的index()方法讓我知道什麼時候傳入了無效ID,但我不希望頁面與500有差距。我想(並建立了)索引方法來跳過模型ID的它不知道 - 但是,我想跟蹤那些無效的模型ID的某種程度。RoR - 跟蹤無效ID的索引方法

authorize :read 
def index 
    modelIds = [] 
    validIdList = "" 
    models = ModelType.get_all_model_names() 
    models.each do |model| 
    id = ModelType.get_id(model) 
    modelIds.push(id) 
    end 
    validIdList = modelIds.join(', ') 
    @filter = "model_type_id IN (#{validIdList})" 
end 

如何跟蹤index()遇到的無效ID?

+0

很難說你應該如何跟蹤不知道你的用例的ID。但將它們保存到文件似乎是一個足夠合理的方法。 –

回答

1

,如果您有標準資源resources :something然後如果你的意思是這樣

/something/#{invalid_id}

無效路線這樣你就不會在索引動作捕捉這些,他們將在展會行動。您可以在before_filter中完成此操作,以稍微減少show操作中的條件邏輯數量。

在控制器

before_filter :check_valid_id, only: [:show]

,並在控制器的私人部分

def check_valid_id unless find_something log(params[:id]) redirect_to :index end end

你也可以在其他成員的路線,如編輯,更新check_valid_id,破壞和提供一個閃光消息,該ID是無效的

+0

所以沒有辦法做這樣的事情:'invalidIds =「model_type_id NOT IN(#{validIdList})」' – 123

+0

你不應該列出所有可能的錯誤ID。您的身份證號碼最多爲2^64(或1.84 x 10^19)的數字減去有效身份證件的數量。所需的計算可能會導致您的網站無用。 – Okomikeruko

+0

我可能不明白你在做什麼,似乎你正在將索引/表演責任混合在一起。這是搜索行動嗎? – Austio