在Rails应用程序中实现链接列表堆栈的位置

时间:2016-11-30 14:40:36

标签: ruby-on-rails data-structures linked-list stack

我正在尝试在我的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

我希望在Rails应用程序中实现Linkedlist Stack

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

1 个答案:

答案 0 :(得分: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. 在文件中,要求文件夹中的所有类。
  3. 例如:

    # /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'