Rails 3关联错误:未定义的方法

时间:2013-02-28 11:55:03

标签: ruby-on-rails methods associations undefined

我已经很长时间以来对此感到困惑并且无法解决这个问题。

我有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'

似乎无法让它发挥作用。帮忙,有人吗?

EDIT 的routes.rb

resources :vehicles 
resources :parameters

resources :makers do
  resources :models
end

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

f是指@vehicle,似乎只有Parameter承担此字段。这就是它失败的原因。

图片的标题说明:

  • Vehicle accepts_nested_attributes_for :parameters parameters_attributes但您attr_accessible中没有fields_for,可能不会很好。

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

答案 2 :(得分:-1)

好的,我搞得一团糟。

首先,我一直在尝试

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

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

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

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

接下来的谜题。