我已经很长时间以来对此感到困惑并且无法解决这个问题。
我有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
答案 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
,但没有为其分配任何值。修好后,它就像一个魅力。非常感谢所有的帮助。
接下来的谜题。