1

我有一个Bike模型和一个Component模型。几个模型继承自Component: Frame,ChainCrankset

当我提交表单时,我的参数如下所示:

"bike" => { "frame" => { "id" => "4" }, "chain" => { "id" => "19" }, ... }

在我的控制器中,以下代码中断:

@bike = Bike.new(params[:bike])
> Frame(#90986230) expected, got HashWithIndifferentAccess(#81888970)

如果我破解我的表单以生成以下参数,它会起作用:

"bike" => { "frame_id" => "4", "chain_id" => "19" ... }

这是我的模型:

class Bike < ActiveRecord::Base
  belongs_to :frame
  belongs_to :chain
  ...
end

class Component < ActiveRecord::Base
  has_many :bikes
end

class Frame < Component
end

单表继承正在工作 - 我可以毫无问题Frame.first地调用。Component.all

我要疯了吗?嵌套参数不是通常的约定吗?这就是通过以下方式生成的:

- f.fields_for @bike.frame do |frame|
  = frame.hidden_field :id

我究竟做错了什么??

4

1 回答 1

2

您正在使用嵌套表单,因此如果您使用accepts_nested_attributes_for标签,嵌套参数应该可以工作(请参阅railscast 196/197)。

belongs_to :frame
accepts_nested_attributes_for :frame
于 2010-10-01T07:23:18.357 回答