我正在尝试同时创建两个对象,但由于某种原因,我的第二个对象的字段是空白的。
模型是:
Users: id, name, last, email, password ...
Locations: address, longitude, latitude.
关系如此:
User has_many location
Location belongs_to users
事件控制器创建方法:
def create
@event = current_users.events.build(params[:event])
@location = @event.locations.build(params[:location])
@location.longitude = params[:longitude]
@location.latitude = params[:latitude]
respond_to do |format|
if @location.save
@location.longitude = params[:longitude]
@location.latitude = params[:latitude]
if @location.save
if @event.save
format.html { redirect_to @event, notice: 'Event was successfully created.' }
format.json { render json: @event, status: :created, location: @event }
else
format.html { render action: "new" }
format.json { render json: @event.errors, status: :unprocessable_entity }
end
end
end
end
end
形式:
<%= f.hidden_field :latitude %>
<%= f.hidden_field :longitude %>
但是当我创建我的位置时,longitude
和latitude
空白,我的event_id
已填满。是否有更好的方法同时创建两个对象?
答案 0 :(得分:5)
使用表单构建器f
生成两个字段。我怀疑他们在form_for
电话里面。这样做的结果是字段名称将嵌套在模型的命名空间中。这意味着params[<model name>][:longitude]
和params[<model name>][:latitude]
应该包含字段的内容。
您可以检查控制台以查看rails收到的参数。或者,您可以将params哈希打印到控制台以检查其内容:p params
(在您的操作中的某个位置)。
因此,为了使一切正常,您需要访问正确的参数。 (类似于params[:location][:longitude]
)