所以我有一个用户模型和嵌套模型“Entries”,如:
user.rb
class User < ActiveRecord::Base
has_many :entries
...
end
entry.rb
class Entry < ActiveRecord::Base
belongs_to :user
...
end
用户/ show.html.erb
<p><%= link_to 'Destroy', remove_entry_path, method: :delete, data: { confirm: 'Are you sure?' } %></p>
的routes.rb
resources :users do
resources :entries
end
...
delete "remove_entry" => "entries#destroy", :as => "remove_entry"
entries_controller.rb
def destroy
@user = current_user
@user.entries.find(params[:id]).destroy
respond_to do |format|
format.html { redirect_to user_path(current_user), notice: 'Entry was successfully destroyed.' }
format.json { head :no_content }
end
end
我收到了这个错误:
无法找到没有ID的条目
在这一行
@user.entries.find(params[:id]).destroy
我做错了什么?
答案 0 :(得分:1)
您需要将ID传递给此路线:
delete "remove_entry" => "entries#destroy", :as => "remove_entry"
remove_entry路由没有id的位置参数,在你对remove_entry_path的调用中,你没有提供id参数。
这就是为什么在你的控制器动作中,params [:id] == nil
<强>解决方案强>
传递ID
<p><%= link_to 'Destroy', remove_entry_path(id: @entry.id), method: :delete, data: { confirm: 'Are you sure?' } %></p>
或在路线中添加位置参数并将id传递给url助手。
# config/routes.rb
delete "remove_entry/:id" => "entries#destroy", :as => "remove_entry"
和
<!-- in view -->
<p><%= link_to 'Destroy', remove_entry_path(id: @entry.id), method: :delete, data: { confirm: 'Are you sure?' } %></p>
答案 1 :(得分:0)
您收到的params[:id]
为nil
,这就是您收到此错误的原因
无法找到没有ID的条目
使用路径助手传递@entry
对象
<p><%= link_to 'Destroy', remove_entry_path(@entry), method: :delete, data: { confirm: 'Are you sure?' } %></p>