小编jos*_*ing的帖子

Rails中的非RESTful操作

好吧,当GitHub停机时,代码设计问题:
我总是在rails应用程序(通常)中使用非标准RESTful操作进行分析瘫痪.

我有乔布斯,我希望能够取消(并重新激活)它们.它不像设置复选框那么简单; 还有一些其他事情需要发生.所以我不能只使用现有的JobsController#update行动.

我看到以下是我的选择:

1.只需添加cancelreactivate现有的作业控制器.路线将是这样的:

POST /admin/jobs/cancel/:job_id
POST /admin/jobs/reactivate/:job_id
Run Code Online (Sandbox Code Playgroud)

(不是RESTful;假设这是一个坏主意)

2.创建一个JobCancellationsControllerwith createdestroyactions.重新激活作业是destroy一种JobCancellation资源.

我将使用嵌套路由,如下所示:

resources :jobs, except: :show do
  resource :job_cancellation, only: [:create, :destroy]
end
Run Code Online (Sandbox Code Playgroud)

默认情况下会给我一些类似的东西

一个)

POST /admin/jobs/:job_id/job_cancellation
DELETE /admin/jobs/:job_id/job_cancellation
Run Code Online (Sandbox Code Playgroud)

我可以在不改变控制器的情况下整理路线,就像:

b)

POST /admin/jobs/:job_id/cancellation
DELETE /admin/jobs/:job_id/cancellation
Run Code Online (Sandbox Code Playgroud)

虽然这看起来不太直观 - "取消"会更好cancel.所以我可以在保持控制器相同的同时改变路线:

C)

POST /admin/jobs/:job_id/cancel
DELETE /admin/jobs/:job_id/cancel
Run Code Online (Sandbox Code Playgroud)

第一条路线现在有意义(虽然RESTful严格来说不是吗?),但第二条路线不是......"删除工作取消"?所以你要把它改成:

d)

POST /admin/jobs/:job_id/cancel
POST /admin/jobs/:job_id/reactivate
Run Code Online (Sandbox Code Playgroud)

现在路由是有意义的,但看起来可疑地接近上面的选项1),即使路由确实映射到RESTful动作JobCancellationsController而不是非RESTful动作JobsController.将POST /admin/jobs/:job_id/reactivate路线映射到 …

rest ruby-on-rails

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

CakePHP写入缓存时偶然出现错误警告

我正在使用MAMP在本地开发CakePHP 2.2站点.每隔一段时间,我就会得到一个或多个与此类似的警告,关于无法写入一个或多个缓存文件:

Warning: SplFileInfo::openFile(/Applications/MAMP/htdocs/mywebsite/www/app/tmp/cache/persistent/myapp_cake_core_cake_console_en-au): failed to open stream: Permission denied in /Applications/MAMP/htdocs/mywebsite/www/lib/Cake/Cache/Engine/FileEngine.php on line 313
Run Code Online (Sandbox Code Playgroud)

奇怪的是,/ tmp是777,tmp/cache是​​777,而tmp/cache/persistent是777(不要担心......服务器上不会是777!).tmp/cache/persistent中的文件本身是644 - 但我认为Cake正在创建和管理该文件,并且使用它所需的权限.

如果我只刷新页面,则错误消失(然后稍后重新出现).我没有做任何明确的缓存,所以这个东西就是Cake正在做它自动做的事情.

所以我的问题是:

a)Cake的自动缓存是如何工作的?它是否尝试在每次刷新页面时写入该文件,并且偶尔会失败一次?或者它只是尝试偶尔写入该文件,但每次尝试都失败?

b)如果它只是偶尔失败一次,我可以安全地忽略它吗?如果它每次尝试失败,我该如何解决?

在此先感谢您的帮助!

caching cakephp cakephp-2.2

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

MySQL SELECT,其中布尔字段为 NULL 或 false

好的,我一定在这里遗漏了一些非常简单的东西。我只想从 user_id 匹配的表中返回所有记录(简单!)并且“已支付”字段为 NULL 或 0。我的“已支付”字段是 TinyInt (1)。

我的 CakePHP 模型代码是:

$workingRecord = $this->find('first',array(
    'conditions'=>array(
        'Subscription.user_id'=>$userId,
        array('not' => array('Subscription.paid' => true)) // Not True, to catch both false or NULL values
    )
));
Run Code Online (Sandbox Code Playgroud)

CakePHP 生成的 SQL 是这样的:

SELECT `Subscription`.`id`, `Subscription`.`paid` FROM `subscriptions` AS `Subscription` WHERE `Subscription`.`user_id` = 3 AND NOT (`Subscription`.`paid` = '1') LIMIT 1
Run Code Online (Sandbox Code Playgroud)

常识会说这应该有效。问题是 SQL 将返回 'paid' 列中包含 0 的行,但永远不会返回 NULL。

有没有办法在不使用“或”的情况下一次性返回零和空值?

提前致谢。

mysql cakephp cakephp-2.0 cakephp-2.1

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

使用d3定位伪元素 - 是否可能?

这很好用:

d3.selectAll('ul li')
  .style('background', 'red');
Run Code Online (Sandbox Code Playgroud)

但是,这没有做任何事情:

d3.selectAll('ul li:before')
  .style('background', 'red');
Run Code Online (Sandbox Code Playgroud)

返回的选择d3.selectAll('ul li:before')是空的,即使:before元素确实存在,并且具有一些现有的CSS样式.

是否有可能用d3定位伪元素?

而如果是,快速跟进的问题:如何将针对所有的:before伪元素直接(即不)特定的选择?

例如:

var listItems = d3.selectAll('ul li');
var beforeElements = listItems.selectAll('&:before'); // SASS-style selector obviously won't work here
Run Code Online (Sandbox Code Playgroud)

d3.js

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

如何扩展或覆盖CakePHP核心助手的功能/方法

这:Cakephp覆盖HtmlHelper :: link提出了一个非常相似的问题,但没有完整的答案.也许现在,有了Cake 2,就会有.

我想创建一个自定义帮助器,它是Cake的Paginator Helper的子类.我希望我的新助手覆盖Cake的Paginator助手的'numbers'方法,但我希望它继承所有其他方法.

是否有可能以这种方式扩展核心助手?显然,我不想:修改Cake Core; 把不必要的代码放在AppHelper超类中; 或者将整个核心分页助手复制到我的新助手中.

cakephp

4
推荐指数
2
解决办法
5131
查看次数

Ansible保险库不会使用Sublime Text保存更改

我在通过pip安装的OSX上运行ansible 1.9.4.

如果我做ansible-vault create x,然后做一些修改并保存,然后每当我做的文件显示为空白ansible-vault view xansible-vault edit x.

我有Sublime Text 3作为我的$ EDITOR.当我将其设置为vim时,它全部按预期工作,我可以编辑和保存使用ansible-vault加密的文件.知道这里会发生什么吗?

ansible sublimetext3 ansible-vault

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

不同自定义帖子类型的不同缩略图大小,仅为特色图像创建缩略图

我有一个带有一些自定义帖子类型的wordpress网站.每个自定义帖子类型显示一个列表页面,基本上显示特色图像和标题,然后您可以点击一个包含更多图像的详细信息页面.

我只需要调整上传的"特征图像"的大小.如果上传的图像未用作要素图像,我不需要缩略图.此外,每个自定义帖子类型显示不同大小的特征图像.

所以,我想要做的是说:

a)仅为要素图像创建缩略图

b)为某些帖子类型创建特定大小,而不为其他类型创建.

这可能吗?目前,每个上传的图片都有5个缩略图大小,我的wp-content目录比它需要的WAAAY大!

提前致谢.

wordpress wordpress-theming

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

Rails过滤器挂钩,用于在控制器操作运行之后但在呈现视图之前

我有一个狂欢商务2.1.1应用程序(Rails 4.0.0),我想在产品详细信息页面上显示一些"相关产品".相关产品只是随机选择的产品,其品牌/性别与正在观看的产品相同.它正在工作......我已经制作了products_controller_decorator.rb,它扩展了狂欢products_controller.rb.

Spree products_controller.rb有一个before_filter,它设置@product:

before_filter :load_product, :only => :show
Run Code Online (Sandbox Code Playgroud)

我自己的装饰师有一个设置的方法 @related_products

before_filter :get_related_products, :only => :show
Run Code Online (Sandbox Code Playgroud)

问题是:

a)碰巧,load_product之前的过滤器在我get_related_products之前的过滤器之前被调用,所以顺便说一句,我可以访问@product它设置变量.但据我所知,并不能保证会发生这种情况.我想确定稍后调用我的过滤器...

b)Spree的show方法也设置了@taxon,我真的希望能够自己使用 get_related_products方法中使用它.

所以,我想要的是像CakePHP这样的钩子before_render,它在控制器方法运行后被调用,但是在渲染视图之前.我似乎无法找到等效的导轨.有这样的事吗?after_filter我不会这样做,因为在渲染视图后调用它.

如果没有,那么在Spree的产品控制器get_related_productsshow方法运行之后,通过哪种方式可以获得它的实例变量是什么?

ruby-on-rails spree ruby-on-rails-4

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

PRY 或 IRB - 重新加载类并忘记已删除的功能

如果您更改文件然后在 pry 或 irb 中重新加载它,它似乎会选择您添加到该类的任何新功能,但不会忘记您从该类中删除的旧功能。

重现步骤:

  1. 使用单个方法创建一个类 - 例如。say_hello.
  2. 打开 PRY 或 IRB,然后 load 'my_class.rb'
  3. 编辑您的类 - 删除现有方法,并添加一个具有不同名称的新方法 - 例如。 say_goodbye
  4. 重新加载您的课程 - load 'my_class.rb'

您现在可以使用这两种方法。我明白为什么会发生这种情况 - 因为 ruby​​ 允许您重新打开类进行修改,重新加载文件基本上只是重新打开您已经加载的类的现有版本,而不是擦除该类的内存并定义从头再来上课。

我的问题是,除了退出并重新启动 PRY 或 IRB 之外,您如何解决这个问题?你怎么说“完全忘记我以前的课并从头开始重新加载这个文件”?

谢谢!

ruby irb pry

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

在Ruby中将输出存储到数组中

所以我需要创建一个接受名称数组并输出一组字符串的方法.如何将输出存储到数组中?所以我没有一个名字数组,而是有一系列的问候?

def badge_maker(array)
  array.each do |i|
    counter = 0
    while counter < 7
      array[counter] << "Hello, my name is #{i}."
      counter += i
    end
    return array
  end
end
arrayOne = ["Edsger","Ada","Charles","Alan","Grace","Linus","Matz"]

badge_maker(arrayOne)
Run Code Online (Sandbox Code Playgroud)

ruby rspec ruby-on-rails

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