Rails - ActiveRecord :: RecordNotFound(找不到带有' id' = 27的评论):

时间:2017-05-23 11:42:23

标签: ruby-on-rails ruby ajax activerecord model-view-controller

我正在使用Rails构建一个Event应用程序并将注释作为嵌套资源。我尝试使用Ajax /内联编辑实现编辑功能,但我的编辑链接不起作用。 我没有在屏幕上收到错误,但是我的开发日志中出现了错误。评论' id' = 27与event_id有关,而与评论ID无关。我该如何纠正这个? 这是相关代码 -

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 %>

我已检查了路线,但他们应该是全部。我无法检查内联编辑是否有效,除非我先解决此问题。

1 个答案:

答案 0 :(得分: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

然后您可以使用它来查找您的活动和评论。