在rails应用程序中,我有一个哈希数组,我可以轻松地排序
array_of_hashes.sort_by { |hash| hash[:key_to_sort] }
Run Code Online (Sandbox Code Playgroud)
但是,如果不是每个阵列成员都有一个键:key_to_sort呢?然后排序将失败"String与nil的比较失败".有没有办法让排序继续下去?或者还有另一种方法吗?
我正在使用漂亮的实现一些缓存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) 嗯,这是我的第一篇文章 - 在这个网站,个人博客和iPhoneDevSDK论坛之间,我一直能够自己解决问题.我已经为iOS开发了大约五个月,并且从未在Google之外寻求过帮助.但是这一次,我被困住了.
我已经成功实现了Matt Galagher的AudioStream类(必须删除链接,因为SO假定我的帖子是垃圾邮件)到我的应用程序中,我很高兴地报告它工作得很漂亮.我在一个视图控制器中使用它,它实际上是TabBar应用程序中父视图的子视图.事实上,我的实现与Matt的例子没有太大的不同- 我只改变了一些UI元素.
到目前为止,viewDidDisappear当用户切换到另一个选项卡时,我一直在使用停止拖缆.但最近我决定,只要应用程序正在运行,就可以让音频流播放,无论顶视图是什么.这是一个非常简单的变化,现在我的音频流继续播放,无论我在应用程序中的哪个位置.
以下是视图控制器的工作方式:
所有上述工作每次都完美无缺.如果我离开视图(通过弹出到父视图,或导航到另一个选项卡),音频将保持播放,这正是我想要的.但是当我返回到视图时,UI看起来好像我还没有启动它(播放按钮可见,导航提示被隐藏).如果按下播放按钮,我会听到第二个流与第一个流同时播放.
在updateProgress似乎已经停止(如self.navigationItem.prompt不再可见),和我猜的playbackStateChanged是"死"的(不知道如何来形容它).
我花了几个小时来筛选AudioStreamer类试图找出如何保持对流的控制,但我已经筋疲力尽了.我希望有人可以告诉我我错过了什么.
正如我之前所说,我的视图控制器几乎与示例相同(请参阅上面的超链接,因为SO仍假设我是垃圾邮件发送者),只有几个与UI相关的更改.
我想简短的问题是这样的:有没有人能够实现AudioSTreamer类,弹出它的视图,然后返回并能够查看已用时间或停止流?
编辑:下面是我的视图控制器实现AudioStreamer
#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)
#import "AudioStreamer.h" …Run Code Online (Sandbox Code Playgroud) 我有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) 我正在努力将现有的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.*FROMcontactsINNER JOINcontacts_sitesONcontacts.id=contacts_sites.contact_idINNER JOINsitesONcontacts_sites …
在特定的Rails应用程序中,我将LDAP中的二进制数据提取到变量中进行处理.有没有办法检查变量是否包含二进制数据?如果它不是二进制的,我不想继续处理这个变量.我希望用is_a?...
实际上,我从LDAP中提取的二进制数据是一张照片.那么也许有更好的方法来确保变量包含二进制JPEG数据?此检查的结果将决定是继续处理JPEG数据,还是从磁盘渲染默认JPEG.
我在新资产管道以及SASS和SCSS上找到了大量资源.但是有一个问题让我感到困惑:命名CSS文件的正确方法是什么?是的.css.scss,还是不能和我一起去.scss?
在我见过的几乎所有例子中,他们都有前者,所以必须有理由.我更喜欢后者,因为它使我的文件树在ol'眼球上更容易.
无论如何,仅仅因为有些东西并不意味着它是正确的,所以我想知道什么是正确的以及为什么.
我是Rails的新手(即愚蠢,需要一些教学').
我有一个控制器(称之为ControllerFoo)执行一个特定的任务(theMethod),这可能在其他控制器(例如,从内部ControllerBar)有用.所以,当然,该方法被定义为self.theMethod在ControllerFoo(这意味着它是一个类的方法,对吗?),并在访问ControllerBar的ControllerFoo.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 ×4
activerecord ×1
arrays ×1
caching ×1
hash ×1
ios ×1
iphone ×1
objective-c ×1
sass ×1
sorting ×1