我即将开始编写一个Rails应用程序,它允许客户端拥有一个单独的子域来访问我们的应用程序.从数据安全的角度思考,如果每个客户端的访问权限真正限制在他们的数据库中会很好,这样,如果生产代码中存在错误,他们只能访问自己的数据库,而不能访问任何其他数据库.客户端.
我知道如何做我想要的代码,但我想知道是否有一个更简单的解决方案,我可能会失踪.您将如何保护客户端数据,以便在出现错误或黑客威胁时,他们的数据不太可能被暴露?
我正在开发一个示例应用程序,它使用bower进行依赖关系管理,并为它的构建系统吞咽.
我已经使用main-bower-files插件将目录中的所有相关文件复制bower_components到一个build/dist/bower_components目录中.
这一切都很完美,我可以打开我的应用程序index.html,它正确指向每个文件,并正确指向资产.
我的下一步是连接,bower_components以便我有一个CSS和一个JS文件以及所有资产(字体,图像等).我已经使用gulp-useref来捆绑所有组件,它似乎很好用.
但是,组合的一些CSS和JS文件使用相对路径来引用现在不正确的资产,因为所有内容都在一个文件中:
是否有固定资产的标准解决方案?
我是否需要使用gulp来更新资产引用或者使用不同的插件?
我似乎无法找到有关如何执行以下操作的任何文档:我需要为使用我的引擎的任何应用程序提供配置变量,以便他们可以轻松地将设置传递给我的引擎.
有没有人有任何正确或可接受的方式链接?
编辑:作为更新,我想出了一个体面的方法来做到这一点.代码如下.
# file: lib/my_engine.rb
module MyEngine
class Engine < Rails::Engine
initializer "my_engine.configure_rails_initialization" do |app|
# Engine configures Rails app here, this is not what my question was about
end
end
# This is what I was trying to figure out
def self.config(&block)
@@config ||= MyEngine::Configuration.new
yield @@config if block
return @@config
end
end
Run Code Online (Sandbox Code Playgroud)
这允许使用我的引擎的任何应用程序在其任何初始化程序或其environment.rb文件中配置它,调用MyEngine::Configuration类中定义的任何方法:
MyEngine.config do |config|
config.some_configuration_option = "Whatever"
end
Run Code Online (Sandbox Code Playgroud) 我试图找出一种简洁的方法来聚合mousemove事件,以便我确保我的代码被调用,但每250-300毫秒只调用一次.
我曾考虑使用类似下面的内容,但想知道是否有更好的模式,或jQuery提供的东西会做同样的事情:
var mousemove_timeout = null;
$('body').mousemove(function() {
if (mousemove_timeout == null) {
mousemove_timeout = window.setTimeout(myFunction, 250);
}
});
function myFunction() {
/*
* Run my code...
*/
mousemove_timeout = null;
}
Run Code Online (Sandbox Code Playgroud)
编辑:下面的接受的答案会很好地工作对于这种情况,但是,我发现,mousestop()在回答中提供的功能实际上消除了我需要的聚集,所以,如果你正在阅读这个问题,并寻找一个答案,查看是否mousestop插件是你真正需要的!
我在使用jQuery Form Plugin与文件上传字段正常工作时遇到了一些麻烦.当我使用插件提交没有文件上传字段的表单format.json时,respond_to do |format|块的部分被正确调用.但是,通过添加文件上载字段,它只执行format.html使我的javascript代码认为发生了错误的部分.
有没有人遇到这个或知道一种方法来强制插件总是使用json?或者,我可以修改插件用来强制Rails渲染json的url吗?
非常感谢您的帮助!代码如下:
# app/controllers/details_controller.rb
def create
@detail = Detail.new(params[:detail])
style = params[:detail_style].to_sym || :thumb
data = { :id => '5', :url => 'test.rails' }
respond_to do |format|
if @detail.save
flash[:notice] = 'Your image has been saved.'
data = { :id => @detail.id, :url => @detail.data.url(style) }
format.html { redirect_to :action => 'index' }
format.json { render :json => "<textarea>#{data.to_json}</textarea>", :status => :created }
else
format.html { render …Run Code Online (Sandbox Code Playgroud) 我正在升级我的Rails插件,使其成为最新3.0RC1版本的引擎,我在找出最佳(也是最正确的)扩展方法时遇到了一些麻烦ActionController.我在DHH 看过这篇文章,这个问题在这里,但我的问题更多是关于如何正确调用代码ActionController.
例如,我需要在我的引擎控制器中调用以下内容:
class ApplicationController < ActionController::Base
helper :all
before_filter :require_one_user
after_filter :store_location
private
def require_one_user
# Code goes here
end
def store_location
# Code goes here
end
end
Run Code Online (Sandbox Code Playgroud)
我知道如何正确地包含我的两个私有函数,但我找不到让它正确调用的方法helper,before_filter并且after_filter.
我非常感谢一些链接或一种方法来使这项工作.我已经尝试过命名我的控制器以外的东西ApplicationController并且真正ApplicationController扩展它,但这似乎也不起作用.我真的很想找到能让发动机用户的生活变得尽可能简单的任何解决方案.理想情况下,他们不必扩展我的课程,但他们拥有自己的所有功能ApplicationController.
ruby-on-rails rails-engines applicationcontroller ruby-on-rails-3
我是 RSpec 新手,但我真的很喜欢编写测试的简单性,并且在学习 RSpec 的新功能时,我不断地重构它们以使其更加清晰。所以,最初,我有以下内容:
describe Account do
context "when new" do
let(:account) { Account.new }
subject { account }
it "should have account attributes" do
subject.account_attributes.should_not be_nil
end
end
end
Run Code Online (Sandbox Code Playgroud)
后来我了解了该its方法,所以我尝试将其重写为:
describe Account do
context "when new" do
let(:account) { Account.new }
subject { account }
its(:account_attributes, "should not be nil") do
should_not be_nil
end
end
end
Run Code Online (Sandbox Code Playgroud)
由于its不接受 2 个参数,此操作失败,但删除消息效果很好。问题是,如果测试失败,失败示例部分下的消息只会显示
rspec ./spec/models/account_spec.rb:23 # Account when new account_attributes
Run Code Online (Sandbox Code Playgroud)
这并没有太大帮助。
那么,有没有一种方法可以将消息传递给its,或者更好的是,让它自动输出一条正常的消息?
我正在寻找一个Ruby/Rails工具,它将帮助我完成以下任务:
我想在我的数据库中存储以下字符串和类似的字符串.当创建,更新,删除对象等时,我想运行所有字符串,检查CRUD事件是否与字符串的条件匹配,如果是,则运行指定的操作.
When a new ticket is created and it's category=6 then notify user 1234 via email
Run Code Online (Sandbox Code Playgroud)
我打算创建一个构建这些字符串的接口,因此它不需要是一个人类可读的字符串.如果JSONish结构更好,或者工具有现有语言,那就太棒了.我有点想法:
{
object_types: ['ticket'],
events: ['created', 'updated'],
conditions:'ticket.category=6',
actions: 'notify user',
parameters: {
user:1234,
type:'email'
}
}
Run Code Online (Sandbox Code Playgroud)
所以基本上,我需要以下内容:
监视CRUD事件 - 如果该工具有办法实现这一点会很好,但如果该工具本身不提供它,我可以在这里使用Rails的ModelObservers
找到所有匹配的"规则" - 这是我的主要未知数......
执行请求的方法/参数 - 理想情况下,这将在我的Ruby代码中定义为类/方法
我应该调查哪些现有工具?
编辑:
感谢你们到目前为止的回复!我真的很感谢你指着我走正确的道路.
这里的用例是我们有许多不同的客户端,有许多不同的业务规则.对于适用于所有客户端的规则,我可以轻松地在代码中创建它们(使用像Ruleby这样的东西),但是对于所有特定于客户端的规则,我想将它们存储在数据库中.理想情况下,规则可以写入一次,存储在代码中或DB中,然后运行(使用Resque来提高性能).
在这一点上,看起来我将不得不自己滚动,所以任何关于最好的方法或任何我应该调查的工具的想法都将非常感激.
再次感谢!
我有以下参数,无法获得强大的参数.
这是我的基本代码,为了简单起见,可以在Rails控制台中运行:
json = {
id: 1,
answers_attributes: {
c1: { id: "", content: "Hi" },
c2: { id: "", content: "Ho" }
}
}
params = ActionController::Parameters.new(json)
Run Code Online (Sandbox Code Playgroud)
我读过的所有内容都说下面的内容应该可行,但它只给了我id一个空的哈希answers_attributes:
params.permit(:id, answers_attributes: [:id, :content])
=> { "id"=>1, "answers_attributes"=>{} }
Run Code Online (Sandbox Code Playgroud)
如果我代之以手动列表c1和c2(如下所示)它可以工作,但这真的很愚蠢,因为我不知道用户将提供多少答案,这是很多重复:
params.permit(:id, answers_attributes: { c1: [:id, :content], c2: [:id, :content] })
=> {"id"=>1, "answers_attributes"=>{"c1"=>{"id"=>"", "content"=>"Hi"}, "c2"=>{"id"=>"", "content"=>"Ho"}}}
Run Code Online (Sandbox Code Playgroud)
我试图取代c1,并c2用0和1,但我仍然需要手工提供0,并1在我的permit语句.
如何允许未知长度的嵌套属性数组?
我在Google上搜索并阅读了几篇关于不同人如何处理这个问题的文章,但我想知道解决它的标准方法是什么,以及哪一个最适合我的情况.
我有一个AJAX页面,它创建了一个新问题,我需要知道如何从同一个php文件中的插入查询中检索ID,在下一行.
它看起来像这样:
$r = pg_query("INSERT INTO questions (audit_id, type_id, order) VALUES (1,1,1)");
// Fetch ID from $r here...
Run Code Online (Sandbox Code Playgroud)
我已经看到了mysql_insert_id()MySQL 的功能,并且听说pg_last_oid()类似于PostgreSQL,但文档声称它已被弃用并将很快删除.我也看到了使用CURRVAL('my_sequence_table.id')但我不确定这是否适用于AJAX,因为这可能会引发竞争条件.
有人可以告诉我标准的 PHP/PostgreSQL方法来解决这个问题吗?我非常感谢任何评论.
PS我想念Ruby on Rails!
bower ×1
database ×1
file-upload ×1
gulp ×1
jquery ×1
json ×1
mousemove ×1
parsing ×1
php ×1
postgresql ×1
rspec ×1
ruby ×1
rule-engine ×1
security ×1
settimeout ×1
testing ×1