小编Mat*_*ark的帖子

Ruby:排序哈希数组,即使密钥可能不存在

在rails应用程序中,我有一个哈希数组,我可以轻松地排序

array_of_hashes.sort_by { |hash| hash[:key_to_sort] }
Run Code Online (Sandbox Code Playgroud)

但是,如果不是每个阵列成员都有一个键:key_to_sort呢?然后排序将失败"String与nil的比较失败".有没有办法让排序继续下去?或者还有另一种方法吗?

ruby arrays sorting hash

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

Rails.cache.fetch异常:TypeError(<ModelName>无法引用)

我正在使用漂亮的实现一些缓存Rails.cache.fetch.但是,在某个特定实例中,有时我会遇到异常:

TypeError in EmloController#index

Emlo can't be referred to

app/controllers/emlo_controller.rb:320:in `get_employees'
app/controllers/emlo_controller.rb:356:in `prepare_json_response'
app/controllers/emlo_controller.rb:23:in `block (2 levels) in index'
app/controllers/emlo_controller.rb:15:in `index'
Run Code Online (Sandbox Code Playgroud)

看起来fetch会在第一次尝试时总是爆炸(使用上面的内容),然后只要获取在到期时就可以正常工作.我知道我错过了什么,所以一双新鲜的眼睛会很好看.

这是调用缓存提取的方法:

def get_employees

  # This is for a AJAX refresh loop, so a 5-second cache actually helps quite a bit
  Rails.cache.fetch('emlo_all', :expires_in => 5.seconds, :race_condition_ttl => 1) do

    conditions = (params[:id]) ? {:user_id => params[:id]} : nil

    selections = [
      'employee_locations.id AS emlo_id',
      'employee_locations.status_id',
      'employee_locations.notes',
      'employee_locations.until',
      'employee_locations.updated_at',
      'employee_locations.user_id',
      'location_states.id AS state_id',
      'location_states.title AS status_string',
      'location_states.font_color',
      'location_states.bg_color', …
Run Code Online (Sandbox Code Playgroud)

caching ruby-on-rails

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

Matt Gallagher的AudioStream:如何处理视图控制器pop

嗯,这是我的第一篇文章 - 在这个网站,个人博客和iPhoneDevSDK论坛之间,我一直能够自己解决问题.我已经为iOS开发了大约五个月,并且从未在Google之外寻求过帮助.但是这一次,我被困住了.

我已经成功实现了Matt Galagher的AudioStream类(必须删除链接,因为SO假定我的帖子是垃圾邮件)到我的应用程序中,我很高兴地报告它工作得很漂亮.我在一个视图控制器中使用它,它实际上是TabBar应用程序中父视图的子视图.事实上,我的实现与Matt的例子没有太大的不同- 我只改变了一些UI元素.

到目前为止,viewDidDisappear当用户切换到另一个选项卡时,我一直在使用停止拖缆.但最近我决定,只要应用程序正在运行,就可以让音频流播放,无论顶视图是什么.这是一个非常简单的变化,现在我的音频流继续播放,无论我在应用程序中的哪个位置.

以下是视图控制器的工作方式:

  1. 我有一个播放按钮和一个停止按钮,位于同一位置,隐藏了停止按钮.
  2. 当用户按下播放按钮时,播放按钮隐藏,显示UIActivityIndi​​catorView(`[streamer isWaiting]`)
  3. 当流开始播放时(`[streamer isPlaying]`),隐藏了'UIActivityIndi​​catorView`,并出现一个停止按钮
  4. 此外,当`[streamer isPlaying]`时,我在导航提示中显示经过的时间(mm:ss),每秒更新一次

所有上述工作每次都完美无缺.如果我离开视图(通过弹出到父视图,或导航到另一个选项卡),音频将保持播放,这正是我想要的.但是当我返回到视图时,UI看起来好像我还没有启动它(播放按钮可见,导航提示被隐藏).如果按下播放按钮,我会听到第二个流与第一个流同时播放.

updateProgress似乎已经停止(如self.navigationItem.prompt不再可见),和我猜的playbackStateChanged是"死"的(不知道如何来形容它).

我花了几个小时来筛选AudioStreamer类试图找出如何保持对流的控制,但我已经筋疲力尽了.我希望有人可以告诉我我错过了什么.

正如我之前所说,我的视图控制器几乎与示例相同(请参阅上面的超链接,因为SO仍假设我是垃圾邮件发送者),只有几个与UI相关的更改.

我想简短的问题是这样的:有没有人能够实现AudioSTreamer类,弹出它的视图,然后返回并能够查看已用时间或停止流?

编辑:下面是我的视图控制器实现AudioStreamer

.H

#import <UIKit/UIKit.h>
#import <QuartzCore/CoreAnimation.h>
#import <MediaPlayer/MediaPlayer.h>
#import <CFNetwork/CFNetwork.h>

@class AudioStreamer;


@interface RadioViewController : UIViewController
{
    IBOutlet UIButton *playButton;
    IBOutlet UIButton *stopButton;
    IBOutlet UIActivityIndicatorView *waitIndicator;

    AudioStreamer *streamer;
    NSTimer *progressUpdateTimer;

    BOOL shouldAutoStop;
}

- (IBAction)play;
- (IBAction)stop;

- (void)createStreamer;
- (void)destroyStreamer;
- (void)updateProgress:(NSTimer *)aNotification;
- (void)checkWiFi;

@end
Run Code Online (Sandbox Code Playgroud)

.M

#import "AudioStreamer.h" …
Run Code Online (Sandbox Code Playgroud)

iphone objective-c audiostreamer ios

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

Rails路由:将root定义为命名空间

我有2个控制器:

app/
   /controllers
      posts_controllers.rb
      /mobile
         posts_controllers.rb
Run Code Online (Sandbox Code Playgroud)

和我的routes.rb看起来像这样:

root :to => "posts#index"
resources :posts

namespace :mobile do
   root :to => "posts#index"
   resources :posts
end
Run Code Online (Sandbox Code Playgroud)

但是当我访问时/mobile,无论如何渲染第一个控制器的索引页面,也尝试了这个:

namespace :mobile do
   root :to => "mobile/posts#index"
   resources :posts
end
Run Code Online (Sandbox Code Playgroud)

但它给了我错误:uninitialized constant Mobile::Mobile 我想渲染第二个控制器的索引页面,我该怎么做?

编辑

通过输入/ mobile我想渲染位于此处的文件:

app/
   views/
       /mobile
          /posts
             index.html.erb
Run Code Online (Sandbox Code Playgroud)

但它在这里是rending文件:

app/
   views/
       /posts
          index.html.erb
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails rails-routing

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

Rails 4 .order()被JOINS破坏了

我正在努力将现有的Rails 3.2应用程序升级到4.0.不过,我遇到了一堵砖墙.

我有三个模型,Client,Site和Contact.站点是属于客户端的物理位置,客户端可以有许多站点.联系人是属于一个或多个站点的人员.因此,客户可以通过站点拥有多个联系人.

客户:

class Client < ActiveRecord::Base

  has_many :sites, -> { where(:sites => {:deleted => false}).order(:name => :asc) }, :dependent => :destroy
  has_many :contacts, -> { order(:lastname => :asc) }, :through => :sites

end
Run Code Online (Sandbox Code Playgroud)

站点:

class Site < ActiveRecord::Base

  belongs_to :client
  has_and_belongs_to_many :contacts

end
Run Code Online (Sandbox Code Playgroud)

联系方式:

class Contact < ActiveRecord::Base

  has_and_belongs_to_many :sites

end
Run Code Online (Sandbox Code Playgroud)

问题是,当我使用时Client.find(1).contacts,我得到一个ActiveRecord::StatementInvalid例外:

Mysql2 ::错误:'order clause'中的未知列'contacts.name':SELECT contacts.*FROM contactsINNER JOIN contacts_sitesON contacts.id= contacts_sites.contact_idINNER JOIN sitesON contacts_sites …

activerecord ruby-on-rails

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

Rails:可以检查字符串是否是二进制文件?

在特定的Rails应用程序中,我将LDAP中的二进制数据提取到变量中进行处理.有没有办法检查变量是否包含二进制数据?如果它不是二进制的,我不想继续处理这个变量.我希望用is_a?...

实际上,我从LDAP中提取的二进制数据是一张照片.那么也许有更好的方法来确保变量包含二进制JPEG数据?此检查的结果将决定是继续处理JPEG数据,还是从磁盘渲染默认JPEG.

ruby ruby-on-rails

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

SCSS文件名

我在新资产管道以及SASS和SCSS上找到了大量资源.但是有一个问题让我感到困惑:命名CSS文件的正确方法是什么?是的.css.scss,还是不能和我一起去.scss

在我见过的几乎所有例子中,他们都有前者,所以必须有理由.我更喜欢后者,因为它使我的文件树在ol'眼球上更容易.

无论如何,仅仅因为有些东西并不意味着它是正确的,所以我想知道什么是正确的以及为什么.

ruby-on-rails sass asset-pipeline

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

在其他控制器中调用控制器的方法(保持DRY)

我是Rails的新手(即愚蠢,需要一些教学').

我有一个控制器(称之为ControllerFoo)执行一个特定的任务(theMethod),这可能在其他控制器(例如,从内部ControllerBar)有用.所以,当然,该方法被定义为self.theMethodControllerFoo(这意味着它是一个类的方法,对吗?),并在访问ControllerBarControllerFoo.theMethod.困惑了吗?

这是问题:ControllerFoo.theMethod使用会话数据,当调用时ControllerBar,session是零.实际上,从自身调用时,似乎会话也是零.我想我说的是类方法无法访问会话数据?

<rant> 我讨厌如何在PHP </ rant>之类的任何地方简单地访问会话数据

所以现在,由于我不够聪明,不知道如何正确地做到这一点,我只是在我的应用程序中的几个地方重复了逻辑.但这根本不是干的,我讨厌它.

那么如何在控制器中创建一个可供其他控制器访问的方法,并且还可以访问会话数据?

class ControllerFoo < ApplicationController
    def self.theMethod (greeting)
        p "#{greeting} #{session[:user]}!"
    end
end

class ControllerBar < ApplicationController
    def show
        ControllerFoo.theMethod("Hello,")
    end
end
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails

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