我不确定我做了什么因为它工作而且像个白痴一样,我没有在我的应用程序的下一部分工作之前完成工作。我有一个带有嵌套contact
模型的note
模型。我可以创建一个新的联系人,我可以创建一个嵌套在联系人中的注释,但如果我尝试删除一个注释,我会得到The action 'show' could not be found for Accounts::NotesController
错误页面,如果我尝试删除一个联系人,它会使用show方法和不是毁灭。
的routes.rb
Rails.application.routes.draw do
devise_for :users
constraints(SubdomainRequired) do
scope module: 'accounts' do
...
resources :contacts do
resources :notes
end
end
end
...
end
的application.js
//= require rails-ujs
//= require activestorage
//= require turbolinks
//= require_tree .
import Vue from 'vue/dist/vue.esm'
import App from 'components/app.vue'
document.addEventListener('DOMContentLoaded', () => {
document.body.appendChild(document.createElement('app'));
const app = new Vue({
el: 'app',
template: '<App/>',
components: { App }
});
console.log(app)
});
contacts_controller.rb
...
def destroy
@contact = Contact.find(params[:id])
@contact.destroy
respond_to do |format|
format.html {redirect_to contacts_url, notice: 'Contact was successfully destroyed.'}
format.json {head :no_content}
end
end
...
notes_controller.rb
module Accounts
class NotesController < Accounts::BaseController
def create
@contact = Contact.find(params[:contact_id])
@note = @contact.notes.create(params[:note].permit(:id, :body))
redirect_to edit_contact_path(@contact)
end
def destroy
@contact = Contact.find(params[:contact_id])
@note = @contact.notes.find(params[:id])
@note.destroy
redirect_to edit_contact_path(@contact)
end
end
end
泛音/ _head.html.erb
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.1/css/bulma.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/css/select2.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/js/select2.min.js"></script>
<script defer src="https://use.fontawesome.com/releases/v5.0.7/js/all.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
<%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
<%= csrf_meta_tags %>
<%= csp_meta_tag %>
联系人/ index.html.erb
<table class="table is-bordered is-striped is-narrow is-hoverable is-fullwidth">
...
<tbody>
<% @contacts.each do |contact| %>
<tr>
...
<td><%= link_to 'Destroy', contact, method: :delete, remote: true, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
</tbody>
</table>
...
联系人/ edit.html.erb
<section>
<%= render 'form', contact: @contact %>
<%= render @contact.notes %>
<div class="notes-form">
<%= render 'accounts/notes/form' %>
</div>
</section>
备注/ _form.html.erb
<%= form_for([@contact, @contact.notes.build]) do |f| %>
<div class="field">
<div class="control">
<%= f.text_area :body, wrapper: false, placeholder: 'Add A New Note...' %>
</div>
</div>
<div class="field">
<div class="control">
<%= f.button :submit, remote: true, class: 'button is-primary' %>
</div>
</div>
<% end %>
备注/ _note.html.erb
<div class="box">
<article class="media">
<div class="media-content">
<div class="content">
<p>
<%= time_ago_in_words(note.created_at) %> ago <%= note.body %>
</p>
</div>
</div>
<%= link_to 'Delete', [note.contact, note],
method: :delete, class: 'button is-danger', remote: true, data: { confirm: 'Are you sure?' } %>
</article>
</div>