2017-11-25 87 views
1

我有評論和回覆。 評論的has_many回覆Rails has_many錯誤 - 找不到ID

的routes.rb

resources :comments do 
    resources :replies 
end 

當我打開的意見/指數,然後選擇的意見/節目我打印所有的,都與該評論的答覆信息。

<% @comment.replies.each do |reply| %> 

我也可以創建另一個答覆。所有這些正常工作。

問題出現在我決定編輯其中一個答覆時。

<%= link_to 'Edit', edit_comment_reply_path(@comment.replies,reply) %> 

奇怪的是,如果有一個ID一樣,我要修改的答覆的ID的註釋,編輯工作正常。甚至不需要我想修改的特定回覆屬於該評論。但如果我想編輯與ID回覆例如66,但沒有id爲66的註釋,我得到一個錯誤:

Couldn't find Comment with 'id'=65 
<%=form_with(model: @reply, url: [Comment.find(params[:id]), @reply]) do |form| %> 

這是篇/ _form.html.erb這顯然可以作爲一個編輯表單以及。在這種情況下,reply.id是65,它正在尋找具有不存在的相同ID的評論。

+0

你能把'rake routes'的輸出添加到你的問題嗎? – xeon131

+0

@ xeon131是的,我現在要做的 – John

回答

0

你試試?

<%= link_to 'Edit', edit_comment_reply_path(reply) %> 
+0

謝謝!這只是讓我進入編輯鏈接。現在我有另一個問題當我點擊更新。 – John

0

問題在於這行代碼。

<%= link_to 'Edit', edit_comment_reply_path(@comment.replies,reply) %>

edit_comment_reply_path方法需要@comment作爲它的第一個參數。

正確的代碼應該是

<%= link_to 'Edit', edit_comment_reply_path(@comment, reply) %> 

前提是你已經在你的控制器edit行動分配@comment

def edit 
    @comment = Comment.find(params[:comment_id]) 
end 

或者

before_action :set_comment, only: [:create, :edit] 

的一點是,你必須設置@comment在視圖的正確行動。

form_for不正確。您可以傳入params[:id]這是@replyid

<%= form_with(model: @reply, url: comment_reply_path(@comment, @reply)) do |form| %> 
+0

仍然不工作..同樣的錯誤@jackii – John

+0

顯示您的控制器代碼進一步調試 – jackii

+0

我剛剛添加它@jackii – John

0

你的控制器是什麼樣的?此外,您應該無法訪問不屬於您評論的回覆。看看使用適當的範圍和授權。我猜想它唯一的原因是運氣。因爲你確實有一個與reply_id匹配的comment_id,所以調用不會失敗。

+0

@MichaelJamati我將編輯我的文章,並將添加回復控制器 – John

0

好的,你還可以發佈你的評論控制器。 的幾點: 製作使用您的相關功能的使用權的(建議;假設你使用的政策)

def edit 
    authorize @reply 
end 

如果您計劃傳遞評論ID,你也應該set_comment(不只是在創造)。這樣,您還可以確保回覆編輯不會使用不屬於您的用戶的評論(或其他不需要的行爲)執行。

此外,您質疑談論尋找Id 66,但錯誤提到ID 65.這只是一個錯字?

+0

我的解釋只是一個例子。當我在編輯中添加set_comment時,我有另一個錯誤@MichaelJamati – John

0

在你RepliesController更改設置註釋方法

def set_comment 
    @comment = Comment.find(reply_params[:comment_id]) 
    end 
+0

ActiveRecord :: RecordNotFound(無法找到評論與'id'=): app/controllers/respond_controller.rb:80:in'set_comment' 但我認爲post_id和comment_id是重複的實例,所以它們具有相同的值@ xeon131 – John

+0

ohh ok,你可以發佈你的方案嗎? – xeon131

+0

我剛剛添加了它 – John