2014-03-28 76 views
0

在控制器我有以下:在軌道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中刪除?

回答

1

當你打電話給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