下面给出了两个与一对多关系相关的模型,它可以正常工作
class User < ActiveRecord::Base
has_many :events, dependent: :destroy
end
但当我将它们一对一关联时
class User < ActiveRecord::Base
has_one :event, dependent: :destroy
end
它给我以下错误
undefined method `build' for nil:NilClass
事件控制器
class EventsController < ApplicationController
def new
@event = current_user.event.build
end
def create
@event = current_user.event.build(event_params)
if @event.save
redirect_to @event
else
render 'new'
end
end
private
def event_params
params.require(:event).permit(:date, :time, :venue)
end
end
答案 0 :(得分:1)
它抛出错误的原因是因为该用户没有事件。虽然这是通过关联建立has_many
关系的方式,但它不适用于has_one
。请参阅documentation on has_one
,他们说调用.build
无效。
而是使用@event = current_user.create_event
添加has_one
关系将为您提供以下方法:
association(force_reload = false)
association=(associate)
build_association(attributes = {})
create_association(attributes = {})
create_association!(attributes = {})
答案 1 :(得分:0)
对于has_one
关联,Rails提供了一组特殊的方法来构建关联(http://geojson.org/geojson-spec.html#multipolygon)
build_event
create_event
这两个属性都使用build
关联的has_many
方法。
在您的情况下,将current_user.event.build
更改为current_user.build_event
,将current_user.event.build(event_params)
更改为current_user.build_event(event_params)