2017-04-09 59 views
0

我正在做一個簡單的應用程序,用戶可以在其中刪除,編輯,查看和創建任務,任務包含應執行的描述,標題和日期。設計 - 「範圍」每個用戶的系統任務

我部署了設備來註冊用戶和用戶登錄,但我很難按用戶「範圍」任務,即用戶將登錄並只能查看,編輯和刪除他創建的任務。

我的架構:

ActiveRecord::Schema.define(version: 20170407164641) do 

    # These are extensions that must be enabled in order to support this database 
    enable_extension "plpgsql" 

    create_table "tarefas", force: :cascade do |t| 
    t.string "titulo" 
    t.text  "descricao" 
    t.datetime "data" 
    t.integer "user_id" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    t.index ["user_id"], name: "index_tarefas_on_user_id", using: :btree 
    end 

    create_table "users", force: :cascade do |t| 
    t.string "email",     default: "", null: false 
    t.string "encrypted_password",  default: "", null: false 
    t.string "reset_password_token" 
    t.datetime "reset_password_sent_at" 
    t.datetime "remember_created_at" 
    t.integer "sign_in_count",   default: 0, null: false 
    t.datetime "current_sign_in_at" 
    t.datetime "last_sign_in_at" 
    t.inet  "current_sign_in_ip" 
    t.inet  "last_sign_in_ip" 
    t.datetime "created_at",       null: false 
    t.datetime "updated_at",       null: false 
    t.index ["email"], name: "index_users_on_email", unique: true, using: :btree 
    t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true, using: :btree 
    end 

end 

我用belongs_to的:用戶的has_many:任務。

我tasks_controller:

class TarefasController < ApplicationController 

before_filter :authenticate_user! 

def index 
    @tarefa = Tarefa.all 
end 

def show 
    @tarefa = Tarefa.find(params[:id]) 

end 

def new 
    @tarefa = Tarefa.new 
end 

def edit 
    @tarefa = Tarefa.find(params[:id]) 
end 

def create 
    @tarefa = Tarefa.new(tarefa_params) 
    @user = current_user 
    if @tarefa.save 
     redirect_to @tarefa 
    else 
     render 'new' 
    end 
end 

def update 
    @tarefa = Tarefa.find(params[:id]) 
    if @tarefa.update(tarefa_params) 
     redirect_to @tarefa 
    else 
     render 'edit' 
    end 
end 

def destroy 
    @tarefa = Tarefa.find(params[:id]) 
    @tarefa.destroy 

    redirect_to tarefas_path 
end 

private 
    def tarefa_params 
    params.require(:tarefa).permit(:titulo, :descricao, :data) 
    end 
end 

回答

0

如果你已經創建了一個用戶和Tarefa模型之間一對多的關係,建立在用戶的新Tarefa記錄

我想這些任務編輯/修改選項可用用戶登錄後只有如此更改你的控制器爲:

def edit 
    @tarefa = current_user.tarefas.find_by(id: params[:id]) 
end 

def create 
    @tarefa = current_user.tarefas.new(tarefa_params) 
    @user = current_user 
    if @tarefa.save 
     redirect_to @tarefa 
    else 
     render 'new' 
    end 
end 

def update 
    @tarefa = current_user.tarefas.find_by(id: params[:id]) 
    if @tarefa.update(tarefa_params) 
     redirect_to @tarefa 
    else 
     render 'edit' 
    end 
end 

def destroy 
    @tarefa = current_user.tarefas.find_by(id: params[:id]) 
    @tarefa.destroy 

    redirect_to tarefas_path 
end 

private 
    def tarefa_params 
    params.require(:tarefa).permit(:titulo, :descricao, :data) 
    end 
end 

當你想列出所有與用戶相關的tarefas,你可以使用

list_of_user_tasks = current_user.tarefas 

user = User.find_by(id: any_user_id) 
list_of_user_tasks = user.tarefas 

這是基本的,簡單的,也有更多的方法雖然。