理解rails gems plugins

Rails插件到Gem迁移
本文介绍了Rails4中插件的废弃以及如何将原有插件转换为Gem的方式使用。同时,提供了一个具体示例,展示如何创建一个简化时间格式化的插件。
[color=blue]#33 Making a Plugin[/color]
[quote]注意 这种手法,可能对 rails 4 不再起作用
rails4 http://guides.rubyonrails.org/plugins.html

关于废弃插件的说明 https://github.com/rails/rails/commit/dad7fdc5734a3813246f238ac5760b2076932216
rails 3及以下
[color=red]After loading the framework and any gems and plugins in your application,[/color] Rails turns to loading initializers. An initializer is any Ruby file stored under +config/initializers+ in your application. You can use initializers to hold configuration settings that should be made after all of the frameworks, plugins and gems are loaded, such as options to configure settings for these parts.
rails4
[color=red]After loading the framework and any gems in your application, [/color]Rails turns to loading initializers. An initializer is any Ruby file stored under +config/initializers+ in your application. You can use initializers to hold configuration settings that should be made after all of the frameworks and gems are loaded, such as options to configure settings for these parts.

rails4 不再有 vendor/plugins
Rails 4 将删除 Rails::Plugins 类,所以将不会再加载 vender/plugins 目录下的任何代码。
大多数应用应该依赖于 gems 而不是插件。但如果你在 vender/plugins 中还有一些代码,你有两种选择:
改用 gem 方式实现,多数插件已经有了 gem 版本,如果没有你可以在 Gemfile 中通过 :gitor:pathoptions 来引用插件
移到 lib/your\_pluginand ,然后在 conconfig/initializers 初始化
[/quote]
[img]http://asciicasts.com/system/photos/172/original/E033I02.png[/img]
简介:将get/set等做成一个plugin 减少重复
You can sometimes remove a lot of duplication by generating methods dynamic.
In this episode I will show you how to create a plugin which does exactly that.

目的:
class Task < ActiveRecord::Base
belongs_to :project
def due_at_string
due_at.to_s(:db)
end

def due_at_string=(due_at_str)
self.due_at = Time.parse(due_at_str)
rescue ArgumentError
@due_at_invalid = true
end
end
将以上代码简化成
class Task < ActiveRecord::Base
stringify_time :due_at
end


手法:
1、script/generate plugin stringify_time

2、init.rb
require 'stringify_time'

class ActiveRecord::Base
extend StringifyTime
end

3、stringify_time.rb
module StringifyTime
def stringify_time(*names)
names.each do |name|

define_method "#{name}_string" do
read_attribute(name).to_s(:db)
end

define_method "#{name}_string=" do |time_str|
begin
write_attribute(name, Time.parse(time_str))
rescue ArgumentError
instance_variable_set("@#{name}_invalid", true)
end
end
define_method "#{name}_is_invalid?" do
return instance_variable_get("@#{name}_invalid")
end
end
end
end

4、 最终,我们的task model可以这样写
class Task < ActiveRecord::Base
belongs_to :project
stringify_time :due_at
def validate
errors.add(:due_at, "is invalid") if @due_at_invalid
end
end
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)内容概要:本文介绍了一种基于神经网络的数据驱动迭代学习控制(ILC)算法,用于解决具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车路径跟踪问题,并提供了完整的Matlab代码实现。该方法无需精确系统模型,通过数据驱动方式结合神经网络逼近系统动态,利用迭代学习机制不断提升控制性能,从而实现高精度的路径跟踪控制。文档还列举了大量相关科研方向和技术应用案例,涵盖智能优化算法、机器学习、路径规划、电力系统等多个领域,展示了该技术在科研仿真中的广泛应用前景。; 适合人群:具备一定自动控制理论基础和Matlab编程能力的研究生、科研人员及从事无人车控制、智能算法开发的工程技术人员。; 使用场景及目标:①应用于无人车在重复任务下的高精度路径跟踪控制;②为缺乏精确数学模型的非线性系统提供有效的控制策略设计思路;③作为科研复现与算法验证的学习资源,推动数据驱动控制方法的研究与应用。; 阅读建议:建议读者结合Matlab代码深入理解算法实现细节,重点关注神经网络与ILC的结合机制,并尝试在不同仿真环境中进行参数调优与性能对比,以掌握数据驱动控制的核心思想与工程应用技巧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值