我有一个带有复合主键的旧数据库。我已成功将composite_primary_keys gem添加到项目中,并可以检索并为相关对象创建新记录。更新,删除或显示单个记录的操作无效,并且失败并显示错误 '没有路线匹配[GET]“/ estimates / 4.0,Test,A.0.0'
该类定义为:
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 :(得分:0)
我遇到了完全相同的问题,经过大量测试后发现了以下解决方案:
首先,由于您偏离了默认&#39; id&#39;由Rails分配的主键,您需要将其添加到routes.rb:
var merge = require('merge-stream');
gulp.task('scripts', () => {
var js = gulp.src('app/scripts.babel/**/*.js')
.pipe($.sourcemaps.init())
.pipe($.babel({ presets: ['es2015'] }))
.pipe($.rename({dirname:''}))
return merge(
js.pipe($.clone())
.pipe($.sourcemaps.write('.'))
.pipe(gulp.dest('app/scripts')),
js.pipe($.clone())
.pipe($.uglify())
.pipe(gulp.dest('dist/scripts')));
});
只需在&#39; param&#39;中提及复合键的一个属性即可。哈希会做。
其次,您不需要这段代码
resources :estimates, param: :es_gsu_id
现在,您对/estimates/4.0,Test,A.0.0的GET请求将被路由到&#39; show&#39;估计&#39;的行动控制器,您可以使用&#39; find&#39;像这样的方法:
Rails.application.routes.draw do
constraints(:id => /\w+(,\w+)*/) do
resources :estimates
end
params [:es_gsu_id]将具有值&#39; 4.0,Test,A,0.0&#39;这将由&#39;发现&#39;搜索与此组合键匹配的唯一记录的方法。