0

我的 Ruby 版本:ruby 1.8.7 (2011-02-18 patchlevel 334) [i386-mingw32] 我的 Rails 版本:Rails 2.3.11

我得到的错误是:

No route matches "/hcfcdsensors/4513.0/show_graph_hcfcd" with {:method=>:post}

这是我的模型

class Hcfcdsensor < ActiveRecord::Base
    set_primary_key :device_id
    has_one :hcfcdsensorvalue
    has_many :hcfcdraindatas
end

class Hcfcdsensorvalue < ActiveRecord::Base
    belongs_to :hcfcdsensor
end

class Hcfcdraindata < ActiveRecord::Base
  set_table_name 'hcfcdraindata'
  belongs_to :hcfcdsensor
end

我的路线是:

 map.resources :hcfcdraindatas
 map.resources :hcfcdsensors

 map.show_graph_hcfcd 'hcfcdsensors/:device_id/show_graph_hcfcd', :controller => 'hcfcdsensors', :action => 'show_graph_hcfcd'

link_to_remote 语句是:

<%= link_to_remote "show" , :url => show_graph_hcfcd_url(@hcfcdsensors[0]) ,:update => "graphDiv" %>

“device_id”字段是双精度类型。如果我删除主键覆盖并将路由中的“:device_id”替换为“:id”,则此路由系统可以正常工作

任何帮助是极大的赞赏。

谢谢, 肖纳克

4

2 回答 2

1

我相信.0你的路径部分混淆了路由引擎。通常,组件中不允许使用句点,:device_id因为它被用作分隔符。

您可以做的是.通过字符串替换将您的号码中的违规内容替换为其他内容,或者使用乘以比例因子的值来达到所需的精度。例如,如果您需要精确到小数点后三位,请使用:

show_graph_hcfcd_url((@hcfcdsensors[0] * 1000).to_i)

读取参数时,向下转换:

hfcd = params[:device_id].to_f / 1000

在相关控制器中定义一个常数来表示该比例因子并避免使用这种硬编码的幻数可能会很方便。

于 2011-04-27T02:16:47.903 回答
0

为什么是device_id一个double?它是遗留数据库吗?即便如此,我不知道为什么有人会使用 adouble作为主键。

您应该将其更改为integer.

如果不能这样做,则应将以下方法添加到Hcfcdsensor.

def to_param
  primary_key.to_i.to_s
end
于 2011-04-27T02:41:34.813 回答