2016-11-30 218 views
0

我想在我的Rails應用程序中實現鏈接列表堆棧,這是一個基本的待辦事項列表。但我不確定我會在當前的Rails應用程序結構中放置鏈接列表的代碼。有人可以提供任何指導嗎?這是模型還是控制器?基本的在Rails應用程序中實現鏈接列表堆棧

截圖待辦事項應用 Todolist

任務控制器:

class TasksController < ApplicationController 

def create 
    @task = current_user.tasks.build(task_params) 

    if @task.save 
    flash[:notice] = "Task created successfully" 
    else 
    flash[:error] = "Error creating task" 
    end 

    redirect_to current_user 
end 

def destroy 
    @task = current_user.tasks.find(params[:id]) 

    if @task.destroy 
    flash[:notice] = "Task completed successfully" 
    else 
    flash[:error] = "Error completing task" 
    end 

    redirect_to current_user 
end 

private 

def task_params 
    params.require(:task).permit(:name) 
end 

Show.html.erb文件創建的任務

<h1>Hello, <%= current_user.email %></h1> 

<h2>Create New Task</h2> 
<%= form_for [current_user, @task] do |f| %> 
    <%= f.label :name %> 
    <%= f.text_field :name %> 
    <%= f.submit "Create", class: 'btn btn-primary' %> 
<% end %> 
<h2>Current Tasks</h2> 
<% current_user.tasks.each do | task| %> 
    <p> 
    <%= task.name %> 
    <%=link_to [current_user, task], method: :delete do %> 
     <span class="glyphicon glyphicon-ok"></span> 
    <% end %> 
    </p> 
<% end %> 

Task.rb(型號)

class Task < ActiveRecord::Base 
    belongs_to :user 
end 

User.rb(型號)

class User < ActiveRecord::Base 
    # Include default devise modules. Others available are: 
    # :confirmable, :lockable, :timeoutable and :omniauthable 
    has_many :tasks 
    devise :database_authenticatable, :registerable, 
    :recoverable, :rememberable, :trackable, :validatable 
end 

LinkedList的堆棧我想在Rails應用程序

module LinkedList 
    class Node 
    attr_accessor :value, :next_node 

    def initialize(value, next_node) 
     @value = value 
     @next_node = next_node 
     end 
    end 

    class Stack 
     def initialize 
     @first = nil 
     end 

     def push(value) 
     @first = Node.new(value, @first) 
     end 

     def pop 
     flash[:notice] = "Task completed successfully" if is_empty? 
     value = @first.value 
     @first = @first.next_node 
     value 
     end 

     def is_empty? 
     @first.nil? 
     end 
    end 

    end 
實施

回答

0

任何非Web應用程序代碼(即這可能是一個獨立的Ruby對象)進入/lib文件夾。

首先在您的Rails應用程序中包含lib文件夾。

默認情況下不會這樣做,因此人們可以在需要時靈活地明確地使用require-庫的某些部分。

我們將通過執行以下操作,包括所有的lib

config.autoload_paths << Rails.root.join('lib') 

隨後的lib裏面,讓我們創建一個linked_list.rb文件。

在這裏你可以編寫代碼,它將被包含在你的應用程序中,由於自動加載每個第一級文件lib

對於更復雜的圖書館,我們稱之爲test,你需要做到以下幾點:

  1. 做一個文件夾,名爲test一個Ruby文件。
  2. 在該文件中,需要文件夾中的所有類。

例如:

# /lib/test/class1.rb 
module Test 
    class Class1 
    end 
end 

假設我們也有Class2Class3

# /lib/test.rb 
module Test 
end 

require 'test/class1' 
require 'test/class2' 
require 'test/class3'