大家好,我已经搜索了这个问题的答案,所以我最终会在这里问一下。我是一个非常新的程序员,试图学习HTML和ruby。我正在编写一个非常简单的待办事项应用程序,但我无法弄清楚如何解决此错误:
“无法找到带有'id'=#”
的Todotodos_controlller.rb
class TodosController < ApplicationController
def index
@todos = Todo.all
end
def new
@todo = Todo.new
end
def edit
@todo = Todo.find(params[:id])
end
def create
@todo = Todo.create(todo_params)
redirect_to todos_path
end
private
def todo_params
params.require(:todo).permit(:item)end
end
这是我的观点
new.html.slim
= form_for (@todo) do |f|
p
= f.text_field :item, :placeholder => "Add new item"
p
= f.submit
edit.html.slim
= form_for(@link) do |f|
p
= f.text_field :item
p
= f.submit
index.html.slim
- @todos.each do |todo|
ul
li=todo.item
p
= link_to "New", new_todo_path
p
= link_to "Edit", edit_todo_path(@todos)
p
= link_to "Delete", '#'
的routes.rb
Rails.application.routes.draw do
root to: "todos#index"
resources :todos
end
编辑:
我的编辑视图与现在完全一样
= form_for(@todo) do |f|
p
= f.text_field :item
p
= f.submit
如果我的格式错误,请先道歉,第一次在这里提问。
答案 0 :(得分:1)
您正在尝试将修改链接链接到所有@todos,但它应该链接到单个todo
:
= link_to "Edit", edit_todo_path(todo)
答案 1 :(得分:0)
如果你看一下index.html.slim,你需要传递一个todo值而不是所有todos:
// @todos contains a collection of all the todos
- @todos.each do |todo|
// inside this block todo contains your single todo
ul
li=todo.item
p
= link_to "New", new_todo_path
p
= link_to "Edit", edit_todo_path(todo) #notice it's todo not @todos
p
= link_to "Delete", '#'
这将解决您的上述错误,但您的edit.html.slim中有另一个错误,因此您需要修复它,否则它会在您的表单中给您另一个错误你必须使用@todo而不是@link
= form_for @todo do |f|
// fields
此外,如果您想要为表单显示验证错误,那么在您的create方法中,您应该使用.save而不是.create,checkout Displaying Validation errors in views