小编had*_*ees的帖子

如何组织不适合普通MVC的操作

我正在创建一个调查应用程序,因此我创建了一个调查控制器,它可以非常安静地创建,更新等调查.然而,现在我正在添加其他行动,比如"采取",进行调查,以及"分享",以便分享调查.还有更多的行动.我开始怀疑我是否应该以不同的方式组织我的代码并将这些新动作移动到他们自己的控制器中,但是我不太确定采取或分享或者我的其他一些操作非常适合REST.如果我不太担心调查控制器的大小,它们几乎更有意义.

要么我可以保持它的原样,要么我正在考虑创建一个调查命名空间,并创建像Survey :: TakeController和Survey :: ShareController.然后我会猜测我是否会使用新动作或索引?

我不确定正确的做法.如果我确实创建了一个调查命名空间,那么我应该将原始SurveyController移入其中吗?这会产生一些奇怪的方法,如survey_survey_path.

model-view-controller ruby-on-rails

5
推荐指数
1
解决办法
161
查看次数

以Ruby可以理解的格式获取Wikipedia信息框

我试图将维基百科的信息框中的数据转换为哈希或其他东西,以便我可以在我的Ruby on Rails程序中使用它.具体来说,我对Infobox公司Infobox人感兴趣.我一直在使用的例子是"福特汽车公司".我希望得到公司的信息以及与福特公司方框相关联的人员的人员信息.

我已经尝试从维基百科APIDBPedia中找出如何做到这一点,但我没有太多运气.我知道维基百科可以将一些东西作为json返回,我可以用ruby解析但是我无法弄清楚如何获取信息框.在DBPedia的情况下,我有点迷失在如何查询它以获取福特汽车公司的信息.

ruby wikipedia web-scraping dbpedia mediawiki-api

4
推荐指数
1
解决办法
2592
查看次数

为什么curl_multi_select和curl_multi_info_read相互矛盾?

当我运行以下代码时,在我看来curl_multi_select并且curl_multi_info_read相互矛盾.据我所知,它curl_multi_select应该是阻塞,直到curl_multi_exec有响应,但我还没有看到实际发生.

$url = "http://google.com";
$ch  = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_VERBOSE, TRUE);

$mc = curl_multi_init();
curl_multi_add_handle($mc, $ch);

do {
  $exec = curl_multi_exec($mc, $running);
} while ($exec == CURLM_CALL_MULTI_PERFORM);

$ready=curl_multi_select($mc, 100);
var_dump($ready);

$info = curl_multi_info_read($mc,$msgs);
var_dump($info);
Run Code Online (Sandbox Code Playgroud)

这回来了

int 1
boolean false
Run Code Online (Sandbox Code Playgroud)

这似乎与自己相矛盾.怎么可以准备好,没有任何消息?

我正在使用的php版本是5.3.9

php curl curl-multi

4
推荐指数
1
解决办法
4004
查看次数

如何使用rspec测试屏幕抓取?

我正在写一个很大程度上依赖于屏幕抓取的网站.因为我知道屏幕抓取很容易破坏我想以某种方式得到通知有问题.

我认为可行的解决方案是为我想支持的每个站点编写一个rspec测试.测试将打开每个站点的几个远程页面,并将它们与我对刮刀的期望输出进行比较.我还想对本地缓存的副本运行相同的测试,所以我知道我的代码更改是否破坏了刮刀或远程站点是否发生了变化.我想以某种方式每天运行一次这些测试,并通知我任何问题.

最终我想把它变成一颗宝石,因为这对我来说是一个反复出现的问题.我倾向于做很多刮刮,知道什么时候破碎会很好.

所以我的问题是我为代码编写测试相对较新,我不知道设置它的最佳方法是什么.

ruby screen-scraping rubygems rspec

4
推荐指数
1
解决办法
638
查看次数

以编程方式确定某人是否拥有某个网站?

我需要弄清楚确定某人是否是网站的实际所有者的最佳方法.我不只是指域名,尽管在很多情况下可能就是这种情况.

我的第一个倾向是让他们在他们的HTML中特别注释我的程序可以抓取.例如:

<!-- @webcode:1234 -->
Run Code Online (Sandbox Code Playgroud)

这种方法的一个可能的问题是理论上可以将其添加到其页面上的注释中或者添加内容的其他方式.虽然我不确定我有什么,但他们不能这样做.

我的另一个想法是,因为我计划提供一个JavaScript小部件只是为了抓住它,虽然我不想强迫他们添加小部件.

<script type="text/javascript" src="http://yoursite.com/widget/widget/A4923D2342JF"></script>
Run Code Online (Sandbox Code Playgroud)

还可以采用哪些其他机制来确定网站的所有权/控制权?

html javascript widget web

3
推荐指数
1
解决办法
247
查看次数

如何按多个字段过滤结果?

我正在使用ruby on rails和结果页面上的调查应用程序,我想让用户通过我在调查开始时提出的一系列人口统计问题来过滤答案.

例如,我问用户他们的性别和职业是什么.所以我在想性别和职业的下拉.两个下拉菜单都会默认为全部,但如果用户选择了女性和营销人员,那么我的结果页面只会给女性营销人员提供答案.

我认为这样做的正确方法是使用named_scopes,我的每个人口统计学问题都有一个named_scope,在本例中为性别和职业,这将从下拉列表中获取一个消毒值,以便在条件下使用我不确定如何动态创建named_scope链,因为我有5个人口统计学问题,并且可能其中一些将被设置为全部.

filtering named-scope ruby-on-rails filter

2
推荐指数
1
解决办法
5901
查看次数

使用具有大量事务条件的状态机

我正在rails 4上写一个类似于kickstarterindiegogo的电子商务平台.产品的状态在很大程度上取决于各种条件,例如订单是否足够.因此,例如,如果我使用gem state_machine我的代码可能看起来像这样.

class Product  < ActiveRecord::Base
  has_many :orders

  state_machine :initial => :prelaunch do
    event :launch do
      transition :prelaunch => :pending, :if => lambda {|p| p.launch_at <= Time.now }
    end

    event :fund do
      transition :pending => :funded, :if => :has_enough_orders?
    end
  end

  def has_enough_orders?
    if orders.count > 10
  end
end
Run Code Online (Sandbox Code Playgroud)

然后我可能会创建一个模型观察者,以便每次下订单时我都会检查product.has_enough_orders?,如果返回,true我会调用product.fund!.因此has_enough_orders?被多次检查.这似乎不是很有效.

另外product.launch!还有类似的问题.我能想到实现它的最好方法是使用类似的工具sidekiq来检查是否有任何预先推出的产品通过他们的launch_at时间.然而,这看起来同样很脏.

我只是在想它,或者你通常会如何使用状态机?

ruby-on-rails state-machine e-commerce ruby-on-rails-4

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