无法找到Todo的' id'

时间:2014-09-09 17:47:37

标签: html ruby-on-rails ruby slim-lang

大家好,我已经搜索了这个问题的答案,所以我最终会在这里问一下。我是一个非常新的程序员,试图学习HTML和ruby。我正在编写一个非常简单的待办事项应用程序,但我无法弄清楚如何解决此错误:

“无法找到带有'id'=#”

的Todo
  

todos_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

我要离开这个教程http://masteruby.github.io/weekly-rails/2014/03/22/how-to-create-todo-list-app-static-pages.html#.VA8t4_ldU3l

如果我的格式错误,请先道歉,第一次在这里提问。

2 个答案:

答案 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