0

我無法找到的東西,會在正確的方向引導。其他人對嵌套資源的類似問題似乎在解決accepts_nested_attributes_for…這並不是我想要做的。我並沒有試圖從父母那裏拯救孩子,我試圖直接從孩子那裏拯救。和嵌套資源routes.rb中使用自定義to_param,怎麼能強參數允許創建/更新允許?

在我的routes.rb,我嵌套我的資源

resources :parents, param: :parent do 
    resources :children, param: :child 
end 

parentchild表都有自己的id列,但也有在列parentchild唯一索引分別,這點我是要在URL中使用而不是id

http://example.com/parents/parent/children/child

這是圍繞工作正常瀏覽要每個控制器的showeditindex行動。

問題是也有例外節約數據。

我希望這個問題的根源並不歸結爲一個字段中child表也稱爲child爲這就是我用來覆蓋模型to_param,需要繼續保持這種辦法。

導航到編輯屏幕:http://example.com/parents/harry/children/sally/edit和形式力推提交,返回此NoMethodError例外:

NoMethodError at /parents/harry/children/sally
undefined method `permit' for "sally":String

我敢肯定,這個問題是值得做的如何我強參數線在children_controller.rb。我可以添加到require:parent哈希和:child可能?

def children_params 
    params.require(:child).permit(:child, :date_of_birth, :nickname) 
end 

更新1(由PARAMS):下面是請求參數:

{ 
    "utf8"=>"✓", 
    "_method"=>"patch", 
    "authenticity_token"=>"fAkBvy1pboi8TvwYh8sPDJ6n2wynbHexm/MidHruYos7AqwlKO/09kvBGyWAwbe+sy7+PFAIqKwPouIaE34usg==", 
    "child"=>"sally", 
    "commit"=>"Update Child", 
    "controller"=>"children", 
    "action"=>"update", 
    "parent_parent"=>"harry" 
} 

其他實例變量在範圍內出錯時:

@parent

<Parent id: 1, parent: "harry", description: "", user_id: 1, created_at: "2015-06-27 12:00:15", updated_at: "2015-06-27 12:00:15"> 

@child

<Child id: 1, child: "sally", date_of_birth: nil, parent_id: 1, nickname: nil, created_at: "2015-06-27 12:00:15", updated_at: "2015-06-27 12:00:15"> 
+0

你可以發佈參數日誌? – Pavan

+0

@Pavan我不敢相信我錯過了這一點。可以,雖然我現在已經離開了大約8小時。當我回來時,我會盡快更新我的問題。 – Turgs

+0

@Pavan我已經添加了他們。 – Turgs

回答

0

事實證明,問題似乎是因爲一個模型屬性在模型中被命名爲相同,這就是params哈希也被稱爲(真正問題似乎在哪裏)。

我需要做的就是重命名params散列。

children_controller.rb,我不得不改變:

def children_params 
    params.require(:child).permit(:child, :date_of_birth, :nickname) 
end 

到&hellip;

def children_params 
    params.require(:anything_else).permit(:child, :date_of_birth, :nickname) 
end 

,然後也改變了我的form_for形式從新建/編輯觀點:

<%= simple_form_for([@parent, @child]) do |f| %> 

到&hellip;

<%= simple_form_for([@parent, @child], as: :child_params) do |f| %> 

現在,無論是在測試中還是用戶通過用戶界面正常使用網站時,它們都可以很好地發揮作用。

1

PARAMS,您需要更改children_params像下面

def children_params 
    params.permit(:child, :date_of_birth, :nickname) 
end 
+0

對不起 - 我已經簡要地刪除了這個答案,因爲它只是部分方式。更改爲這使得我的測試(使用minitest)可以正常工作,但是當用戶實際使用站點時會使驗證失敗。 – Turgs

+0

@Turgs請在你的帖子中解釋。 – Pavan