Add references between projects and todos
This commit is contained in:
@@ -65,6 +65,6 @@ class TodosController < ApplicationController
|
|||||||
|
|
||||||
# Only allow a list of trusted parameters through.
|
# Only allow a list of trusted parameters through.
|
||||||
def todo_params
|
def todo_params
|
||||||
params.expect(todo: [ :name, :description ])
|
params.expect(todo: [ :name, :description, :completed, :priority, :project_id ])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
class Project < ApplicationRecord
|
class Project < ApplicationRecord
|
||||||
|
has_many :todos, dependent: :destroy
|
||||||
validates :name, presence: true
|
validates :name, presence: true
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,2 +1,3 @@
|
|||||||
class Todo < ApplicationRecord
|
class Todo < ApplicationRecord
|
||||||
|
belongs_to :project
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,4 +1,9 @@
|
|||||||
<h1><%= @project.name %></h1>
|
<h1><%= @project.name %></h1>
|
||||||
|
|
||||||
|
<% @project.todos.each do |todo| %>
|
||||||
|
<li><%= link_to todo.name, todo_path(todo) %></li>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
<%= link_to "Edit", edit_project_path %>
|
<%= link_to "Edit", edit_project_path %>
|
||||||
<%= button_to "Delete", project_path, method: :delete %>
|
<%= button_to "Delete", project_path, method: :delete %>
|
||||||
<%= link_to "Back", projects_path %>
|
<%= link_to "Back", projects_path %>
|
||||||
@@ -21,6 +21,21 @@
|
|||||||
<%= form.textarea :description %>
|
<%= form.textarea :description %>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<%= form.label :completed %>
|
||||||
|
<%= form.check_box :completed %>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<%= form.label :priority %>
|
||||||
|
<%= form.number_field :priority %>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<%= form.label :project_id %>
|
||||||
|
<%= form.collection_select :project_id, Project.all, :id, :name, prompt: "Select a project" %>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<%= form.submit %>
|
<%= form.submit %>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -9,4 +9,18 @@
|
|||||||
<%= todo.description %>
|
<%= todo.description %>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<strong>Completed:</strong>
|
||||||
|
<%= todo.completed %>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<strong>Priority:</strong>
|
||||||
|
<%= todo.priority %>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<strong>Project:</strong>
|
||||||
|
<%= link_to todo.project.name, project_path(todo.project) %>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
5
db/migrate/20251027123148_add_project_id_to_todos.rb
Normal file
5
db/migrate/20251027123148_add_project_id_to_todos.rb
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
class AddProjectIdToTodos < ActiveRecord::Migration[8.1]
|
||||||
|
def change
|
||||||
|
add_reference :todos, :project, null: false, foreign_key: true
|
||||||
|
end
|
||||||
|
end
|
||||||
6
db/schema.rb
generated
6
db/schema.rb
generated
@@ -10,7 +10,7 @@
|
|||||||
#
|
#
|
||||||
# It's strongly recommended that you check this file into your version control system.
|
# It's strongly recommended that you check this file into your version control system.
|
||||||
|
|
||||||
ActiveRecord::Schema[8.1].define(version: 2025_10_27_122702) do
|
ActiveRecord::Schema[8.1].define(version: 2025_10_27_123148) do
|
||||||
create_table "projects", force: :cascade do |t|
|
create_table "projects", force: :cascade do |t|
|
||||||
t.boolean "active", default: true, null: false
|
t.boolean "active", default: true, null: false
|
||||||
t.datetime "created_at", null: false
|
t.datetime "created_at", null: false
|
||||||
@@ -24,6 +24,10 @@ ActiveRecord::Schema[8.1].define(version: 2025_10_27_122702) do
|
|||||||
t.text "description"
|
t.text "description"
|
||||||
t.string "name"
|
t.string "name"
|
||||||
t.integer "priority", default: 1, null: false
|
t.integer "priority", default: 1, null: false
|
||||||
|
t.integer "project_id", null: false
|
||||||
t.datetime "updated_at", null: false
|
t.datetime "updated_at", null: false
|
||||||
|
t.index ["project_id"], name: "index_todos_on_project_id"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
add_foreign_key "todos", "projects"
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user