在轨道4的控制器,thing_params.delete(:东西)不删除:东西键值对

问题描述:

在控制器我有以下:在轨道4的控制器,thing_params.delete(:东西)不删除:东西键值对

# app/controllers/things_controller.rb 

def create 
    kind = thing_params.delete(:kind) 
    detail_attributes = thing_params.delete(:detail_attributes) 
    @detail = Detail.create(kind, detail_attributes) 
    @thing = current_user.things.build(thing_params) 
    ... 
end 


private 

def thing_params 
    params.require(:thing).permit(
    :name, 
    :position, 
    :kind, 
    { detail_attributes: [ :detail_category_id, ... ] }, 
end 

两个kinddetail_attributes在被正确地设置create方法的前两行。但是,thing_params.delete(:kind)不会从thing_params散列中删除“kind”键值对。与:detail_attributes一样。

我该怎么做才能将它们从thing_params中删除?

当你打电话给thing_params时,你从params得到一堆东西的副本。然后,您从该副本中删除:detail_attributes。然后,您再次致电thing_params以获得另一份新的副本。你应该做的更是这样的:

clean_params = thing_params 
detail_attributes = clean_params.delete(:detail_attributes) 
#... 
@thing = current_user.things.build(clean_params) 

这样,你将只工作的清理params一个副本,而不是两个。

+0

当然!谢谢。 – robertwbradford