我正在尝试在我的Rails应用程序中实现一个链接列表堆栈,这是一个基本的待办事项列表。但我不确定在当前的Rails应用程序结构中将链接列表的代码放在何处。有人可以提供任何指导吗?这会在模型还是控制器内?
任务控制器:
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
答案 0 :(得分:0)
任何非Web应用程序代码(即可能是独立的Ruby对象的东西)都在/lib
文件夹中。
首先在您的Rails应用程序中包含lib
文件夹。
默认情况下不会这样做,因此人们可以在必要时灵活地明确require
部分库。
我们将通过执行以下操作来包含所有lib
:
config.autoload_paths << Rails.root.join('lib')
然后在lib
内,让我们创建一个linked_list.rb
文件。
在这里你可以编写代码,它应该包含在你的应用程序中,因为自动加载加载lib
中的每个第一级文件。
对于更复杂的库,我们称之为test
,您需要执行以下操作:
test
的文件夹和Ruby文件。例如:
# /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'