2017-05-23 59 views
0

我正在建設一個使用Rails的事件應用程序,並有評論作爲嵌套的資源。我試圖使用Ajax/in-line編輯來實現編輯功能,但是我的編輯鏈接不起作用。 我沒有在屏幕上看到錯誤,但我從我的開發日誌中得到了以上錯誤。註釋'id'= 27與event_id不是註釋ID相關。我該如何糾正這一點? 下面是相關的代碼 -Rails的 - ActiveRecord :: RecordNotFound(找不到評論與'id'= 27):

comments_controller.rb

class CommentsController < ApplicationController 

    before_action :set_event, only: [:show, :create, :edit, :update, :destroy] 
    before_action :set_comment, only: [:show, :create, :edit, :update, :destroy] 


    def create 

     @comment = @event.comments.create(comment_params) 
     @comment.user_id = current_user.id 

     if @comment.save 
      redirect_to @event 
     else 
      render 'new' 
     end 
    end 


    # GET /comments/1/edit 
    def edit 

     respond_to do |f| 
      f.js 
      f.html 
     end 
    end 

    def show 
    end 



    def update 
     if @comment.update(comment_params) 
      redirect_to @event, notice: "Comment was successfully updated!" 
     else 
      render 'edit' 
     end 
    end 



    def destroy 

     @comment.destroy 

     redirect_to event_path(@event) 
    end 

    private 

    def set_comment 
     @comment = Comment.find(params[:id]) 
    end 

    def set_event 
     @event = Event.find(params[:event_id]) 
    end 


    def comment_params 
     params.require(:comment).permit(:name, :body) 
    end 


end 

_comment.html.erb

<div class="comment clearfix"> 
    <div class="comment_content"> 
    <div id="<%=dom_id(comment)%>" class="comment"> 
     <p class="comment_name"><strong><%= comment.name %></strong></p> 
     <p class="comment_body"><%= comment.body %></p> 

    </div> 

     <% if user_signed_in? %> 
     <p><%= link_to 'Edit', edit_event_comment_path(@event, @comment.event), id: "comment", remote: true %></p> 
     <p><%= link_to 'Delete', [@comment.event, comment], 
        method: :delete, 
        class: "button", 
        data: { confirm: 'Are you sure?' } %></p> 
     <% end %> 
    </div> 
</div> 

edit.js.erb

$('#comment').append('<%= j render 'form' %>'); 

_form.html.erb

<%= simple_form_for([@event, @comment], remote: true) do |f| %> 


    <%= f.label :comment %><br> 
    <%= f.text_area :body %><br> 
    <br> 
    <%= f.button :submit, label: 'Add Comment', class: "btn btn-primary" %> 
<% end %> 

我檢查的路線,他們都是因爲他們應該be.I無法檢查在線編輯是否會工作,除非我解決這個問題第一。

+0

這是爲什麼? 'edit_event_comment_path(@event,@ comment.event)'?都是傳遞事件,請執行'edit_event_comment_path(@event,@comment)' –

+0

然後我在頁面上找到'缺少必需的鍵[:id]'錯誤。 –

+0

它是'@ comment'還是隻是'comment'?我把它看作你的視圖中的'comment',使用它 –

回答

0

據我可以看到你有兩個動作之前,set_event然後set_comment。

如果你已經設置了這兩個參數來尋找params [:id],那麼這意味着它們顯然會在搜索時使用相同的值。你需要改變其中的一個,我們可以說set_event,喜歡的東西:

def set_event 
    @event = Event.find(params[:event_id]) 
end 

你也將不得不改變你的路線,佔新ID。如果您使用的是標準的資源路線:

resources :events, param: event_id do 
    resources :comments 
end 

這會給你的路線,如:

localhost:3000/events/:event_id/comments/:id 

然後你就可以用它來找到您的活動和意見。

相關問題