我在 chords/:id/show 页面上有一个表格(如下所示)。我可以在表单中输入一个 :note_id ,然后使用 :params 中的 :chord_id 和表单中的 :note_id 创建一个 ChordNote 。这很好用。但是,当我尝试使用相同的表单删除 ChordNote 时,我收到一条错误消息:
ChordNotesController#destroy 中的 NoMethodError,nil:nilClass 的未定义方法“[]”
这是“ChordNote”的控制器,它以多对多的关系连接和弦和音符。
def create
@chord = Chord.find(params[:chordnote][:chord_id])
@note = Note.find(params[:chordnote][:note_id])
if @chord.hasnote?(@note)
# Add error message here, have it not redirect
redirect_to @chord
else
@chord.addnote!(@note)
redirect_to @chord
end
end
def destroy
@chord = Chord.find(params[:chordnote][:chord_id])
@note = Note.find(params[:chordnote][:note_id])
Chordnote.find_by(note_id: @note.id, chord_id: @chord.id).destroy
redirect_to chord_path(@chord)
end
这是表格(出现在 chords/:id/show 上):
<%= form_for(@chord.chordnotes.build(chord_id: @chord.id)) do |f| %>
<div><%= f.hidden_field :chord_id, value: @chord.id %></div>
<div class="field">
<%= f.text_field :note_id, placeholder: "Enter the note's id" %>
</div>
<%= f.submit "Add Note", class: "btn btn-large" %>
<%= link_to "Remove Note", Chordnote.find_by(note_id: 1), method: :delete, title: "test title", class: "btn btn-large" %>
<% end %>
关于为什么破坏不起作用的任何想法?谢谢!
nil:NilClass 的未定义方法“[]”
def destroy
####The error is on the following line####
@chord = Chord.find(params[:chordnote][:chord_id])
@note = Note.find(params[:chordnote][:note_id])
Chordnote.find_by(note_id: @note.id, chord_id: @chord.id).destroy
redirect_to chord_path(@chord)
Rails.root:/Users/mydocs/myprojects/rails_projects/what_key_v002
Application Trace | Framework Trace | Full Trace
app/controllers/chordnotes_controller.rb:23:in `destroy'
Request
发布参数:
{"_method"=>"delete",
"id"=>"10"}