NoMethodError (неопределенный метод `each 'для #) - PullRequest
0 голосов
/ 28 декабря 2018

Я пытаюсь сделать простое веб-приложение с проектами и некоторыми задачами для этого проекта.Ubuntu 18.10 на Oracle VM, Ruby 2.5.3p105, Rails 5.2.2, Postgresql 10

Когда я пытаюсь протестировать его в консоли rails, я могу создать проект без проблем, но когда я пытаюсь создать задачу, я получаюэто

2.5.3 :001 > project = Project.create title: "My project"
   (0.2ms)  BEGIN
  Project Create (0.8ms)  INSERT INTO "projects" ("title", "created_at", "updated_at") VALUES ($1, $2, $3) RETURNING "id"  [["title", "My project"], ["created_at", "2018-12-28 20:10:57.929619"], ["updated_at", "2018-12-28 20:10:57.929619"]]
   (15.1ms)  COMMIT
 => #<Project id: 2, title: "My project", created_at: "2018-12-28 20:10:57", updated_at: "2018-12-28 20:10:57"> 
2.5.3 :002 > todo = Todo.create text: "Some random task"
   (0.3ms)  BEGIN
   (0.3ms)  ROLLBACK
 => #<Todo id: nil, project_id: nil, text: "Some random task", created_at: nil, updated_at: nil, isCompleted: false> 
2.5.3 :003 > project.todos = Todo.create text: "Some random task"
   (0.3ms)  BEGIN
   (0.2ms)  ROLLBACK
Traceback (most recent call last):
        1: from (irb):3
NoMethodError (undefined method `each' for #<Todo:0x00007f7ab02c91d8>)

Это моя миграция

class CreateProjects < ActiveRecord::Migration[5.2]
  def change
    create_table :projects do |t|
      t.string :title
      t.timestamps
    end

    create_table :todos do |t|
      t.belongs_to :project, index: true
      t.text :text
      t.timestamps
    end
    add_column :todos, :isCompleted, :boolean, :default => false
  end
end

Это мой проект и модели todo

class Project < ApplicationRecord
  has_many :todos
end

class Todo < ApplicationRecord
  belongs_to :project
end 

Так что я делаю не так и как я могу получитьэто работать?

1 Ответ

0 голосов
/ 28 декабря 2018

что я делаю не так

Вы передаете одну задачу в метод, который ожидает набор задач.

как я могу получитьэто работает?

Вот более идиоматический способ:

project.todos.create(text: "Some random task")

Прочтите это руководство, оно будет полезно: https://guides.rubyonrails.org/association_basics.html

...