Ich schreibe eine einfache Rails App, die Benutzer, Projekte und Aufgaben hat. Und ich habe das nächste Problem: Jeder Benutzer muss seine eigenen Projekte haben, und jedes Projekt muss seine eigenen Aufgaben haben. Wenn ich versuche, meine App über die Konsole zu debuggen, kann ich sehen, dass Projekte und Aufgaben ohne "user_id" und erstellt werden "project_id" .So wurde meine DB falsch konfiguriert und wegen App funktioniert nicht richtig (Spalten wurden nicht zu den Projekten und Aufgaben Tabellen hinzugefügt und deshalb kann die App einfach keine Projekte erstellen, die nur zu einem Benutzer gehören und Aufgaben, die nur zu einem Projekt gehören (und das ist der Hauptpunkt der App) Kann mir jemand helfen, mit meinen Modellen und Migrationen umzugehen, denn ich bin wirklich mit diesem Zeug festgefahrenHinzufügen von Tabellenspalten korrekt in Schienen 4
Hier sind die entsprechenden Modelle und Migrationen
Projekt.rb
class Project < ActiveRecord::Base
belongs_to :user
has_many :tasks, dependent: :destroy
validates :name, presence: true, uniqueness: true
end
User.rb
class User < ActiveRecord::Base
has_many :tasks, through: :projects, dependent: :destroy
has_many :projects, dependent: :destroy
attr_accessor :remember_token
before_save { self.email = email.downcase }
validates :name, presence: true, length: { maximum: 50 }
VALID_EMAIL_REGEX = /\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i
validates :email, presence: true, length: { maximum: 255 },
format: { with: VALID_EMAIL_REGEX },
uniqueness: { case_sensitive: false }
has_secure_password
validates :password, presence: true, length: { minimum: 6 }, allow_nil: true
# Returns the hash digest of the given string.
def User.digest(string)
cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST :
BCrypt::Engine.cost
BCrypt::Password.create(string, cost: cost)
end
# Returns a random token.
def User.new_token
SecureRandom.urlsafe_base64
end
# Remembers a user in the database for use in persistent sessions.
def remember
self.remember_token = User.new_token
update_attribute(:remember_digest, User.digest(remember_token))
end
# Returns true if the given token matches the digest.
def authenticated?(remember_token)
return false if remember_digest.nil?
BCrypt::Password.new(remember_digest).is_password?(remember_token)
end
# Forgets a user
def forget
update_attribute(:remember_digest, nil)
end
end
Task.rb
class Task < ActiveRecord::Base
belongs_to :project
end
Migration für die Erstellung von Projekten
class CreateProjects < ActiveRecord::Migration
def change
create_table :projects do |t|
t.string :name
t.timestamps null: false
end
end
end
Und für die Erstellung von Aufgaben
class CreateTasks < ActiveRecord::Migration
def change
create_table :tasks do |t|
t.string :name
t.datetime :deadline
t.timestamps null: false
end
end
end
Jetzt, wenn ich versuche/erstellen Sie Update/eine neue Aufgabe löschen habe ich immer einige Fehler wie
Auch hier sind die entsprechenden Controller, vielleicht auch etwas falsch gibt
projects_controller.rb
class ProjectsController < ApplicationController
before_action :find_project!, only: [ :update, :destroy]
# GET /projects
# GET /projects.json
def index
@projects = current_user.projects
@project = Project.new
end
# GET /projects/1
# GET /projects/1.json
def show
end
# GET /projects/new
def new
@project = Project.new
end
# GET /projects/1/edit
def edit
end
# POST /projects
# POST /projects.json
def create
@project = current_user.projects.create(project_params)
respond_to do |format|
if @project.save
format.html { redirect_to home_url }
format.json { render :show, status: :created, location: @project }
else
format.html { render :home_url }
format.json { render json: @project.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /projects/1
# PATCH/PUT /projects/1.json
def update
respond_to do |format|
if @project.update(project_params)
format.html { redirect_to home_url }
format.json { render :show, status: :ok, location: @project }
else
format.html { render :home_url }
format.json { render json: @project.errors, status: :unprocessable_entity }
end
end
end
# DELETE /projects/1
# DELETE /projects/1.json
def destroy
@project.destroy
respond_to do |format|
format.html { redirect_to home_url }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions
def find_project!
@project = current_user.projects.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def project_params
params.require(:project).permit(:name)
end
end
tasks_controller.rb
class TasksController < ApplicationController
before_action :set_task, only: [:show, :edit, :update, :destroy]
# GET /tasks
# GET /tasks.json
def index
@tasks = Task.all
end
# GET /tasks/1
# GET /tasks/1.json
def show
end
# GET /tasks/new
def new
@task = Task.new
end
# GET /tasks/1/edit
def edit
end
# POST /tasks
# POST /tasks.json
def create
@task = @project.tasks.create(task_params)
respond_to do |format|
if @task.save
format.html { redirect_to home_url }
format.json { render :show, status: :created, location: @task }
else
format.html { render :home_url }
format.json { render json: @task.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /tasks/1
# PATCH/PUT /tasks/1.json
def update
respond_to do |format|
if @task.update(task_params)
format.html { redirect_to home_url }
format.json { render :home_url, status: :ok, location: @task }
else
format.html { render :home_url }
format.json { render json: @task.errors, status: :unprocessable_entity }
end
end
end
# DELETE /tasks/1
# DELETE /tasks/1.json
def destroy
current_user.tasks.where(id: params[:task][:task_ids])
respond_to do |format|
format.html { redirect_to home_url }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def task_params
params.require(:task).permit(:name, :position)
end
def find_task!
@task = current_user.tasks.find(params[:id])
end
def find_project!
@project = current_user.projects.find(params[:task][:project_id])
end
end
Sollte ich auch has_many und has_many_through Relationen zu Migrationen hinzufügen? @lassvi – Mikhah
Nun, das hat dieses Problem gelöst, aber ich habe immer noch das Problem, das ich [hier] (http://stackoverflow.com/questions/36060338/make-unique-object-in-rails) erwähnt habe, ty sowieso @ Lassvi – Mikhah