在我的rails应用程序中,我有两个名为Kases和Notes的模型。它们的工作方式与博客帖子的评论方式相同,即。每个Kase条目都可以附加多个注释。
我已经完成了所有工作,但由于某种原因,我无法使用destroy链接为Notes工作。我认为我忽略了与标准模型的相关模型不同的东西。
Notes控制器
class NotesController < ApplicationController
# POST /notes
# POST /notes.xml
def create
@kase = Kase.find(params[:kase_id])
@note = @kase.notes.create!(params[:note])
respond_to do |format|
format.html { redirect_to @kase }
format.js
end
end
end
Kase模型
class Kase < ActiveRecord::Base
validates_presence_of :jobno
has_many :notes
注意模型
class Note < ActiveRecord::Base
belongs_to :kase
end
在Kase show视图中,我调用了/ notes中的部分名为_notes.html.erb:
Kase Show View
<div id="notes">
<h2>Notes</h2>
<%= render :partial => @kase.notes %>
<% form_for [@kase, Note.new] do |f| %>
<p>
<h3>Add a new note</h3>
<%= f.text_field :body %><%= f.submit "Add Note" %>
</p>
<% end %>
</div>
/notes/_note.html.erb
<% div_for note do %>
<div id="sub-notes">
<p>
<%= h(note.body) %><br />
<span style="font-size:smaller">Created <%= time_ago_in_words(note.created_at) %> ago on <%= note.created_at %></span>
</p>
<%= link_to "Remove Note", kase_path(@kase), :confirm => 'Are you sure?', :method => :delete, :class => 'important' %>
</div>
<% end %>
正如你所看到的,我有一个Remove Note destroy链接,但这会破坏与音符相关联的整个Kase。如何使销毁链接仅删除注释?
<%= link_to "Remove Note", kase_path(@kase), :confirm => 'Are you sure?', :method => :delete, :class => 'important' %>
任何帮助都将一如既往地受到高度赞赏!
谢谢,
丹尼
答案 0 :(得分:1)
<%= link_to "Remove Note", note_path(note), :confirm => 'Are you sure?', :method => :delete, :class => 'important' %>
您还需要config / routes.rb中的以下条目(检查它是否已存在)
map.resources :notes
并检查NotesController中的以下方法
def destroy
@note = Note.find(params[:id])
@note.destroy
.... # some other code here
end
如果你没有NotesController并且不想拥有它,还有另一种方法可以做到这一点
答案 1 :(得分:1)
你正在使用kase -t hat调用delete方法,这就是为什么它删除了一个kase。此链接中没有任何内容
<%= link_to "Remove Note", kase_path(@kase), :confirm => 'Are you sure?', :method => :delete, :class => 'important' %>
除了提到笔记的文字外 - 为什么要删除笔记呢?尝试
<%= link_to "Remove Note", note_path(note), :confirm => 'Are you sure?', :method => :delete, :class => 'important' %>
这假设您已设置标准的restful路由和操作。
另外,您不应该将link_to用于非获取操作,因为
使用button_to代替构建表单来执行相同的操作 http://railsbrain.com/api/rails-2.3.2/doc/index.html?a=M002420&name=button_to