小编Pet*_*xey的帖子

如何创建AngularJS中我的方法可用的自定义对象类

我是角色的忠实粉丝,但它有一些棘手的概念,它们之间存在极其微妙的差异,这就是其中之一.

我只想创建一个类,我可以用它在我的Angular控制器和工厂中创建自定义对象.它肯定不应该那么难,但我无法弄清楚如何做到这一点.我想有一个自定义的ResultSet类,我可以实例化它来创建ResultSet的实例.然而,对于我的生活,我无法弄清楚工厂诉服务的正确语法.

这是所有我想要的:

ResultSet = function(dataSet){ 
  this.filter = function(){ 
    # filters and returns dataSet
    # ...
  }
}
Run Code Online (Sandbox Code Playgroud)

然后我希望能够在控制器内实例化ResultSet的实例等:

MyApp.controller('pageCtrl', ['ResultSet',  (ResultSet) ->
  # ...
  rs = ResultSet.new(dataToFilter)
Run Code Online (Sandbox Code Playgroud)

如何创建允许我创建自定义对象实例的服务?

使用Angular Service而不是Factory似乎更正确,因为服务返回一个对象的实例(这正是我想要的).但我无法弄清楚如何做到这一点......

我如何使用服务来声明我的自定义ResultSet类,然后如何从中实例化实例?

angularjs

15
推荐指数
2
解决办法
3万
查看次数

用于订购列表项的什么是好的,CRUD-交感神经算法?

我想用一种简单的方法来表示对象列表的顺序.当一个对象改变该列表中的位置时,我想更新一个记录.我不知道是否可以这样做,但我有兴趣问这个问题......

愿望清单限制

  • 算法(或数据结构)应允许通过更新单个项的属性在列表中重新定位项
  • 算法(或数据结构)应该不需要内务处理来维护列表的完整性
  • 算法(或数据结构)应允许插入新项目或删除现有项目

为什么我只关心一次更新一个项目...

[更新澄清问题]

此算法的用例是具有CRUDy,资源丰富的服务器设置和干净(Angular)客户端的Web应用程序.

最好在可能的情况下保持纯CRUD操作,并使代码更加清晰.如果我可以在单个resource#update请求中执行此操作,那么我不需要任何额外的服务器端代码来处理重新排序,并且可以使用CRUD完成所有操作而无需进行任何更改.

如果需要为每个移动更新列表中的多个项目,那么我需要在我的控制器上执行新操作来处理它.它不是一个showstopper,但它开始蔓延到Angular,一切都变得不那么理想应该是干净的.


假设我们有一本杂志,杂志有很多页面:

Original magazine
- double page advert for Ford    (page=1)
- article about Jeremy Clarkson  (page=2)
- double page advert for Audi    (page=3)
- article by James May           (page=4)
- article by Richard Hammond     (page=5)
- advert for Volkswagen          (page=6)
Run Code Online (Sandbox Code Playgroud)

选项1:存储整数页码

...我们每次更新最多N条记录

如果我想将Richard Hammond的页面从第5页拉到第2页,我可以通过更改页码来实现.但是我还必须改变它取代的所有页面:

Updated magazine
- double page advert for Ford    (page=1)
- article by Richard Hammond     (page=2)(old_value=5)*
- article …
Run Code Online (Sandbox Code Playgroud)

algorithm

14
推荐指数
5
解决办法
1608
查看次数

你如何急切地加载限制?

在热切加载的文档中,声明:


如果您急切地使用指定的:limit选项加载关联,它将被忽略,返回所有关联的对象:

class Picture < ActiveRecord::Base
  has_many :most_recent_comments, :class_name => 'Comment', 
                                  :order => 'id DESC', :limit => 10
end
Run Code Online (Sandbox Code Playgroud)

Picture.find(:first,:include =>:most_recent_comments).most_recent_comments#=>返回所有相关注释.


如果是这种情况,那么实现加载"限制"的最佳方法是什么?

假设我们急切地将最近10篇博客帖子加载到博客的首页上,我们显然不希望它们都是如此,那么是否应该指定帖子集合的限制和排序?

除此之外,可以在深度加载的元素上指定相同的条件 - 例如,仅在每篇博客文章中显示前三个评论吗?

Blog.find(:blog_id, :include => {:posts => :comments } )
Run Code Online (Sandbox Code Playgroud)

optimization activerecord ruby-on-rails eager-loading

13
推荐指数
2
解决办法
2464
查看次数

在应用程序中混淆数字ID的最佳方法是什么

鉴于我有一个网站,其中大部分资源都有数字ID(即user.id question.id等),但就像德国人回顾二战时我宁愿不向观察者透露这些,最好的方法是什么混淆他们?

我认为该方法将涉及.to_param,然后是一些对称加密算法,但我不确定什么是最有效的加密,以及它将如何影响数据库中的查找时间等.

我们非常感谢道路上的任何建议.

ruby-on-rails

13
推荐指数
4
解决办法
5302
查看次数

如何仅引用活动记录关联中的持久记录

在许多控制器的编辑方法中,您初始化一个新对象并编辑现有对象

class MagazinesController < ApplicationController
   def edit
      @magazine = Magazine.find(params[:magazine_id])
      @page = Page.find(params[:id])
      @new_page = @magazine.pages.new
   end
end
Run Code Online (Sandbox Code Playgroud)

但是在视图中,您通常需要循环遍历持久化对象并分别处理新对象

# magazines#edit
%h4 Existing pages
- @magazine.pages.each do |page|
  %p= link_to page, page.title
Run Code Online (Sandbox Code Playgroud)

问题

...该pages关联包含现有(持久)页面以及我们通过的新页面@new_page = @magazine.pages.new.

这很容易处理,但它很难看

%h4 Existing pages
- @magazine.pages.each do |page|
  - if page.persisted?
    %p= link_to page, page.title
Run Code Online (Sandbox Code Playgroud)

我想使用一些关联方法来只选择那些持久化的页面:

%h4 Existing pages
- @magazine.pages.persisted.each do |page|
  %p= link_to page, page.title
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?

activerecord ruby-on-rails

11
推荐指数
2
解决办法
6465
查看次数

是否可以覆盖Rails路径助手方法?

当前详细的rails路径助手

我经常编写代码来获取以下URL:

link_to @applicant.name, company_job_applicant_path(@company, @job, @applicant)
Run Code Online (Sandbox Code Playgroud)

但是这段代码看起来更像是这个(冗余)片段:

link_to @applicant.name, company_job_applicant_path(@applicant.job.company, @applicant.job, @applicant)
Run Code Online (Sandbox Code Playgroud)

这太傻了.

必需的'pert'路径助手

其他参数可以清楚地从@job中导出.我真正需要输入的是:

link_to @applicant.name, applicant_quick_path @applicant
Run Code Online (Sandbox Code Playgroud)

哪里有一个定义:

def applicant_quick_path applicant
    company_job_applicant_path(applicant.job.company, applicant.job, applicant)
end
Run Code Online (Sandbox Code Playgroud)

我的问题

  1. 这样Rails Way做是否合理
  2. 我应该在哪里存储这种方法?
  3. 我现在可以使用控制台访问这些助手app.company_path.我如何从控制台访问我的新助手方法?

routing ruby-on-rails

10
推荐指数
1
解决办法
5699
查看次数

使用Heroku构建可扩展分析后端的最佳方法是什么?

我需要构建一个简单的分析后端来捕获用户行为.这将通过网页上的Javascript代码段捕获,就像Google Analytics或Mixpanel数据一样.

系统需要捕获接近实时的浏览器数据(滚动页面位置,鼠标位置等).它将每5秒记录一次用户页面的状态.每次测量只有三个属性,但必须经常进行.

数据不一定需要每5秒发送一次,它可以不那么频繁地加速,但是当用户在页面上时,我必须获得所有数据.即我不能每分钟一次公共汽车,并在119秒后离开的人丢失最后59秒的数据.

如果可能的话,我想建立一个在可预见的未来可扩展的系统,这意味着它可以为10,000个站点工作,每个站点有100个并发访问者,即100,000个并发用户,每个用户每5秒发送一个事件.

我并不担心查询数据,可以使用单独的系统来完成.我最感兴趣的是如何处理数据本身的捕获.

要求

根据上述预算,系统需要处理来自100,000个用户的每秒20,000个事件.

我想在Heroku上托管这项服务,但是当我用Rails做了很多工作时,我对高吞吐量系统完全不熟悉(除了知道你不使用Rails处理它们).

问题

  1. 有没有一个商业系统可以做到这一点(如Pusher,但数据捕获和分发)?
  2. 我应该使用HTTP请求还是websockets来做这件事?
  3. node.js是正确的选择还是时尚?
  4. 如果我选择基于套接字的解决方案,Heroku上的dyno可以为每个网络服务器处理多少个套接字
  5. 在Mongo/Reddis等之间进行选择以进行存储有哪些相关的考虑因素
  6. 这是一种实际需要两种解决方案的问题 - 第一种是让您快速,低成本地达到合理规模,第二种是以较低的增量成本超越这种规模,但需要提前进行更多的开发工作?

heroku websocket node.js

10
推荐指数
1
解决办法
1380
查看次数

你有一个自定义触发器来更新Angular中的ng-model字段吗?

Angular有许多选项可以根据输入字段中的事件延迟对模型的更新:

<input type="text" name="username"
   ng-model="user.name"
   ng-model-options="{updateOn: 'default blur', 
                      debounce: {default: 500, blur: 0} }" />
Run Code Online (Sandbox Code Playgroud)

(参见ng-model选项)

您可以根据用户确认延迟对对象的所有提交吗?

Angular提供的基本选项允许将输入表单的编辑与模型的实际更新分离.这有一些很好的奖励,因为如果我们决定取消该更新,我们可以回滚对象的值.

但是,我想延迟模型的更新,而不是基于输入字段上的事件,而是基于某人单击提交按钮.

理想情况下,我喜欢用户可以更新输入的.user表单(例如,对于表单,页面中的任何绑定元素{{user.first_name}}等都不会更新,然后当用户单击提交时,这些更新会提交给模型.

同样,如果用户单击"取消",则可以回滚所有更新.

理想的设置:

<input type="text" name="username"
   ng-model="user.name"
   ng-model-options="{updateOn: 'myCustomEvent' }" />


<button onClick="broadCastMyCustomEventIntoForm()">Save changes</>
Run Code Online (Sandbox Code Playgroud)

这可能吗?

forms angularjs

10
推荐指数
1
解决办法
2854
查看次数

为什么在这个has_many协会中没有"before_remove"解雇?

我想在从has_many关联中删除对象之前运行一些代码.

我认为我可以用before_remove回调做到这一点,但由于某种原因,这不是解雇,我不明白为什么.

class Person < ActiveRecord::Base
  has_many :limbs, before_remove: :print_message

  def print_message
    puts 'removing a limb'
  end
end

class Limb < ActiveRecord::Base
  belongs_to :person
end
Run Code Online (Sandbox Code Playgroud)

虽然这个代码应该在肢体破坏期间打印"去除肢体",但事实并非如此.

p = Person.create;
l = Limb.create person: p;
p.limbs.first.destroy
# SQL (2.1ms)  DELETE FROM "limbs" WHERE "limbs"."id" = ?  [["id", 5]]
# => #<Limb id: 5, person_id: 3, created_at: "2012-01-17 11:28:01", updated_at: "2012-01-17 11:28:01"> 
Run Code Online (Sandbox Code Playgroud)

为什么此destroy操作不会导致该print_message方法运行?

编辑 - 这before_remove回调存在吗?

很多人都问过这个回调是否存在.虽然我可以找到很少的进一步引用,但它在Rails文档中有记录:

http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#label-Association+callbacks …

ruby-on-rails

9
推荐指数
1
解决办法
3950
查看次数

你会如何使用Squeel进行这个Rails子查询?

我想使用Squeel重构下面的查询.我想这样做,以便我可以链接其中的运算符并重新使用查询的不同部分中的逻辑.

User.find_by_sql("SELECT 
    users.*,
    users.computed_metric,
    users.age_in_seconds,
    ( users.computed_metric / age_in_seconds) as compound_computed_metric
    from
    (
      select
        users.*,
        (users.id *2 ) as computed_metric,
        (extract(epoch from now()) - extract(epoch from users.created_at) ) as age_in_seconds
        from users
    ) as users")
Run Code Online (Sandbox Code Playgroud)

查询必须全部在DB中运行,并且不应该是混合Ruby解决方案,因为它必须对数百万条记录进行排序和切片.

我已经设置了问题,因此它应该针对普通user表运行,以便您可以使用它的替代方案.

对可接受答案的限制

  • 查询应返回User具有所有常规属性的对象
  • 每个用户对象也应该包括extra_metric_we_care_about,age_in_secondscompound_computed_metric
  • 查询不应该只通过在多个地方打印出一个字符串来复制任何逻辑 - 我想避免两次做同样的事情
  • [更新]查询应该在数据库中都可以执行,以便在返回到Rails之前,可以在数据库中对可能包含数百万条记录的结果集进行排序和切片
  • [更新]该解决方案适用于Postgres数据库

我想要的解决方案类型示例

下面的解决方案不起作用,但它显示了我希望实现的优雅类型

class User < ActiveRecord::Base
# this doesn't work - it just illustrates what I want to achieve

  def self.w_all_additional_metrics
    select{ ['*', 
              computed_metric, 
              age_in_seconds, 
              (computed_metric …
Run Code Online (Sandbox Code Playgroud)

activerecord ruby-on-rails arel squeel

9
推荐指数
1
解决办法
4090
查看次数