2016-04-02 27 views
0

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ızda
class CreateTasks < ActiveRecord::Migration 
    def change 
    create_table :tasks do |t| 
     t.string :name 
     t.datetime :deadline 

     t.timestamps null: false 
    end 
    end 
end 

Şimdi/Hep burada da enter image description here

gibi bazı hatalar olsun yeni görevi silmek tekabül kontrolörleri, ayrıca yanlış orada

projects_controller.rb

belki bir şeyler vardır
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 

cevap

1

Göçler de geçişlere ekleyin.

class CreateProjects < ActiveRecord::Migration 
    def change 
    create_table :projects do |t| 
     t.string :name 

     t.belongs_to :user 

     t.timestamps null: false 
    end 
    end 
end 

class CreateTasks < ActiveRecord::Migration 
    def change 
    create_table :tasks do |t| 
     t.string :name 
     t.datetime :deadline 

     t.belongs_to :project 

     t.timestamps null: false 
    end 
    end 
end 
+0

Ayrıca, migrasyonlara has_many ve has_many_through ilişkileri de eklemeliyim? @lassvi – Mikhah

+0

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

İlgili konular