2015-10-28 68 views
0

我有一個包含複合主鍵的遺留數據庫。我已經成功地將composite_primary_keys gem添加到項目中,並且可以檢索併爲所討論的對象創建新記錄。該操作來更新,刪除或顯示單個記錄不工作,並與 的錯誤而失敗「沒有路由匹配[GET]「/estimates/4.0,Test,A,0.0'routes.rb Rails 4中沒有與composite_primary_keys匹配的路由

的類定義爲:

class Estimate < ActiveRecord::Base 
    self.table_name = 'estimate' 
    self.primary_keys = [:es_gsu_id, :es_loc_name, es_blh_flag, :es_version_id] 
end 

而且routes.rb中已被修改以:

Rails.application.routes.draw do 
    constraints(:id => /\w+(,\w+)*/) do 
    resources :estimates 
    end 

    resources :estimates 
end 

而且我認爲他爲Rails 4將配置正確的話,我可以檢索所有,並創建新的說明,但單實際上依賴於指定PK字段的訪問失敗在路由上。

任何人都可以看到我做錯了什麼或我錯過了什麼?

回答

0

我面對完全一樣的問題,經過大量的測試,發現了以下解決方案:

首先,因爲你是從默認的「身份證」的Rails的分配主鍵不同的是,你需要把它添加到你的routes.rb:

resources :estimates, param: :es_gsu_id 

只要提到你的複合鍵的屬性之一'參數'散列會做。

其次,你不需要這段代碼現在

Rails.application.routes.draw do 
constraints(:id => /\w+(,\w+)*/) do 
    resources :estimates 
end 

,您的GET請求/estimates/4.0,Test,A,0.0將被路由到「估計」的「秀」行動控制器在這裏你可以使用「查找」方法,像這樣的檢索資源:

resource ||= Estimate.find(params[:es_gsu_id]) 

PARAMS [:es_gsu_id]將值「4.0,測試,A,0.0」這將是由「發現」的方法來使用搜索與此組合鍵匹配的唯一記錄。

相關問題