2016-11-30 3 views
0

Я пытаюсь реализовать Stacked Link Stack в моем приложении Rails, которое является базовым списком дел. Но я не уверен, где бы я разместил код для связанного списка в текущей структуре приложений Rails. Может ли кто-нибудь предложить какие-либо рекомендации? Пойдет ли это в рамках модели или контроллера?Где реализовать привязанный список Stack in Rails app

Скриншот Basic делать списка приложений 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

Любой код, не связанный с веб-приложением (т.е. то, что может быть автономным объектом Ruby) находится в папке /lib.

Сначала включите папку lib в ваше приложение Rails.

Это не делается по умолчанию, поэтому люди могут иметь гибкость в явном виде require -обслуживание частей библиотеки при необходимости.

Мы будем включать все lib, выполнив следующие действия:

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

Тогда внутри lib, давайте создадим linked_list.rb файл.

Здесь Вы можете написать код, который обязательно должен быть добавлен в ваше приложение, поскольку автозагрузка загружает каждый файл первого уровня в lib.

Для более сложных библиотек, давайте назовем его test, вам нужно будет сделать следующее:

  1. Создайте папку и файл под названием Ruby, test.
  2. В файле требуются все классы из папки.

Например:

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

Предположим, что мы также Class2 и Class3.

# /lib/test.rb 
module Test 
end 

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