Kullanıcılara, projelere ve görevlere sahip basit bir ray uygulaması yazıyorum. Ve bir sonraki sorunum var: her kullanıcının kendi projeleri olmalı ve her projenin kendi görevleri olmalıdır. Uygulamamı konsol aracılığıyla hata ayıklamaya çalışırken projeler ve görevlerin "user_id" olmadan oluşturulduğunu görebilirim ve "project_id" .So DB'miz yanlış yapılandırıldı ve uygulama nedeniyle düzgün çalışmadığından (sütunlar Projeler ve Görevler tablolarına eklenmedi ve uygulama nedeniyle sadece bir kullanıcı ve Yalnızca bir projeye ait olan görevler (ve uygulamanın ana noktası budur) Modeller ve geçişlerimle başa çıkmama yardımcı olabilir, bu yüzden gerçekten bu şeylerle takılmama neden oldumRayları doğru şekilde tablo sütunlarına ekleme 4
İlgili modeller ve geçişler
Project.rb
class Project < ActiveRecord::Base
belongs_to :user
has_many :tasks, dependent: :destroy
validates :name, presence: true, uniqueness: true
end
yaratan projelerin
class CreateProjects < ActiveRecord::Migration
def change
create_table :projects do |t|
t.string :name
t.timestamps null: false
end
end
end
için
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
Göç Ve oluştururken görevler için
Ben/güncelleme oluşturmaya çalıştığınızdaclass CreateTasks < ActiveRecord::Migration
def change
create_table :tasks do |t|
t.string :name
t.datetime :deadline
t.timestamps null: false
end
end
end
gibi bazı hatalar olsun yeni görevi silmek tekabül kontrolörleri, ayrıca yanlış orada
projects_controller.rb
belki bir şeyler vardırclass 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
Ayrıca, migrasyonlara has_many ve has_many_through ilişkileri de eklemeliyim? @lassvi – Mikhah
Peki, bu problemi çözdü, ama yine de burada bahsettiğim problemim var (http://stackoverflow.com/questions/36060338/make-unique-object-in-rails), ty anyway @ lassvi – Mikhah