编辑属于帖子的评论。接收"没有路线匹配"错误

时间:2017-11-30 00:08:06

标签: ruby-on-rails ruby

我创建了一个轻量级CRM,用户可以在其中保存联系人并在其上留下注释。我希望用户能够编辑他们的评论。

好的,到目前为止我已经完成了:

我的控制器:

    def edit
      @contact = Contact.find(params[:contact_id])
      @note = @contact.notes.find(params[:id])
    end

   def update
    @contact = Contact.find(params[:contact_id])
    @note = @contact.notes.find(params[:id])

    if @note.update(notes_params)
        redirect_to contact_path(@contact)
    else
        render 'edit'
    end
  end

我的路线:

resources :contacts do 
  resources :notes
end

My Rake Routes:

new_contact_note GET /contacts/:contact_id/notes/new(.:format)  notes#new

edit_contact_note GET  /contacts/:contact_id/notes/:id/edit(.:format) notes#edit

 contact_note GET /contacts/:contact_id/notes/:id(.:format) notes#show

查看文件链接:(我认为这是问题的罪魁祸首)

<p>
 <%= link_to 'Edit Note', edit_contact_note_path(@contact, @note) %>
</p>

然后,当我尝试编辑笔记时,我收到此错误:

No route matches {:action=>"edit", :contact_id=>"1", :controller=>"notes", :id=>nil}, missing required keys: [:id]

(如果您需要任何其他信息,请告诉我,我会给他们)

非常感谢你提前!

这是代码

首先从_form.html.erb文件中呈现表单注释。

<%= form_with(model: [ @contact, @contact.notes.build],
local: true) do |form| %>

<p>
  <%= form.label :title %><br>
  <%= form.text_field :title %>
</p>

<p>
  <%= form.label :body %><br>
  <%= form.text_area :body %>
</p>

<p>
  <%= form.submit %>
</p>

<% end %>

这是_note.html.erb视图,它呈现了笔记的编辑链接:

<p>
  <strong>Note Title:</strong>
  <%= note.title %>
</p>

<p>
  <strong>Note Body:</strong>
  <%= note.body %>
</p>

<p>
  <%= link_to 'Delete Note', [note.contact, note],
            method: :delete,
            data: { confirm: 'Are you sure about the Note going away?' } %>

<p>
 <%= link_to 'Edit Note', edit_contact_note_path(@contact, @note) %>
</p>

然后这里是notes_controller.rb的所有控制器代码

class NotesController < ApplicationController
def create
    @contact = Contact.find(params[:contact_id])
    @note = @contact.notes.create(note_params)
    redirect_to contact_path(@contact)
end

def destroy
    @contact = Contact.find(params[:contact_id])
    @note = @contact.notes.find(params[:id])
    @note.destroy
    redirect_to contact_path(@contact)
end

def edit
    @contact = Contact.find(params[:contact_id])
    @note = @contact.notes.find(params[:id])
end

def update
    @contact = Contact.find(params[:contact_id])
    @note = @contact.notes.find(params[:id])

    if @note.update(notes_params)
        redirect_to contact_path(@contact)
    else
        render 'edit'
    end
end


private
def note_params
    params.require(:note).permit(:title, :body)
end
end

以下是联系人部分的show.html.erb代码。我的错误所在的地方来自:

<p>
  <strong>First Name:</strong>
  <%= @contact.first_name %>
</p>
<p>
   <strong>Last Name:</strong>
   <%= @contact.last_name %>
   </p>
   <hr>
   <h2>Notes:</h2>

   <%= render @contact.notes %>
   <hr>
   <h2>Add a Note:</h2>
   <%= render 'notes/form' %>
   <br>
   <hr>
   <%= link_to 'Back', contacts_path %>
   <%= link_to 'Edit', edit_contact_path(@contact) %>

0 个答案:

没有答案