0

我一直在困惑这个问题已经有一段时间了,无法弄清楚。

我有2个模型:

class Vehicle < ActiveRecord::Base
  attr_accessible :year, :capacity,
  :size, :body, :model_id, :maker_id, :parameters_attributes

    validates :year, numericality: { greater_than: 1900 }
    validates :year, :capacity, :size, :body, presence: true

    belongs_to :model
    belongs_to :maker
    has_many :parameters
    accepts_nested_attributes_for :parameters
    end

class Parameter < ActiveRecord::Base
  attr_accessible :tag, :value
  validates :tag, :value, presence: true
  belongs_to :vehicle
end

在新车视图中,我有:

= form_for [:admin, @vehicle], html: { multipart: true } do |f|
    =# some other stuff in between
    = f.text_field :value, size: 4

我收到这个错误

undefined method `value'

只是似乎无法让它工作。帮助,有人吗?

编辑路线.rb

resources :vehicles 
resources :parameters

resources :makers do
  resources :models
end
4

3 回答 3

1

如果你使用嵌套形式,你应该有类似的东西

f.fields_for :parameters do |parameter|

然后:

parameter.text_field :value, size: 4

另外,记得parameters在控制器中创建一些,例如:

def new
  @vehicle = Vehicle.new
  2.times { @vehicle.parameters.build } #it will create 2 parameters
...
end
于 2013-02-28T12:01:33.127 回答
0

f指的是@vehicle,好像只Parameter熊这个字段。这就是它失败的原因。

旁注:

  • Vehicle你有accepts_nested_attributes_for :parameters但你没有parameters_attributesattr_accessible,不可能是好的。

  • 如果您想在表单中调用关系,请考虑使用fields_for

于 2013-02-28T11:58:49.337 回答
-1

好吧,我把事情搞砸了。

首先我一直在尝试

def new
  @vehicle = @vehicle.parameters.build
end

因此错误undefined method。过了一会儿,我得到了正确的语法,这是一段时间后添加的一个 gabrielhilal。

def new
  @vehicle = Vehicle.new
  @vehicle.parameters.build
end

不管 ;) 还是有问题,因为点击“创建”后他不会在数据库中添加记录。原来我已经设置了validates presence: truefor tag,但没有为其分配任何值。修复后,它就像一个魅力。非常感谢所有的帮助。

进入下一个谜题。

于 2013-03-01T09:44:32.380 回答