我似乎无法belongs_to使用accepts_nested_attributes_forRails 2.3 的新工具在rails视图中生成嵌套表单以获取关系.我确实检查了许多可用的资源,看起来我的代码应该正常工作,但是fields_for爆炸对我来说,我怀疑它与我如何配置嵌套模型有关.
我遇到的错误是一个常见的错误,可能有很多原因:
'@account[owner]' is not allowed as an instance variable name
Run Code Online (Sandbox Code Playgroud)
以下是涉及的两个模型:
class Account < ActiveRecord::Base
# Relationships
belongs_to :owner, :class_name => 'User', :foreign_key => 'owner_id'
accepts_nested_attributes_for :owner
has_many :users
end
class User < ActiveRecord::Base
belongs_to :account
end
Run Code Online (Sandbox Code Playgroud)
也许这就是我在做'rong'的地方,因为帐户可以拥有'所有者',可能是'用户',但用户只有一个'帐户',基于用户模型account_id键.
这是new.html.haml中的视图代码,它炸毁了我:
- form_for :account, :url => account_path do |account|
= account.text_field :name
- account.fields_for :owner do |owner|
= owner.text_field :name
Run Code Online (Sandbox Code Playgroud)
这是新操作的控制器代码:
class AccountsController < ApplicationController
# GET /account/new
def new
@account …Run Code Online (Sandbox Code Playgroud) 所以我们有这个支持UTF8数据的网络应用程序.万岁UTF8.我们可以将用户提供的数据导出为CSV没问题 - 此时它仍然是UTF8.问题是当你在Excel中打开一个典型的UTF8 CSV时,它会将其读作ANSII编码文本,并因此尝试读取两个字节的字符,如ø和ü作为两个单独的字符,最终会失败.
所以我已经做了一些挖掘(Intervals人员在这里有一个有趣的帖子),并且有一些有限的,如果有可笑的烦人选择.其中:
看起来无论如何,我可能会继续为那些不使用它的人提供一个普通的CSV文件,以及一个单独的Excel下载选项.
生成那个能正确支持UTF8的Just-For-Excel文件的最简单方法是什么,亲爱的Stack Overflowers?如果最简单的选项仅支持最新版本的Excel,那仍然是有意义的.
我在Rails堆栈上执行此操作,但很奇怪.Net-ers和任何框架上的人员如何处理这个问题.我自己在几个不同的环境中工作,这绝对是一个将再次出现的问题.
更新2010-10-22:我们在时间跟踪系统Tempo中使用Ruport gem在我第一次发布此问题时提供CSV导出.我的一个同事Erik Hollensbee为Ruport提供了一个快速过滤器,为我们提供了实际的Excel XSL输出,我想我会在这里分享其他任何红宝石:
require 'rubygems'
require 'ruport'
require 'spreadsheet'
require 'stringio'
Spreadsheet.client_encoding = "UTF-8"
include Ruport::Data
class Ruport::Formatter::Excel < Ruport::Formatter
renders :excel, :for => Ruport::Controller::Table
def output
retval = StringIO.new
if options.workbook
book = options.workbook
else
book = Spreadsheet::Workbook.new
end
if options.worksheet_name
book_args = { :name => options.worksheet_name }
else
book_args = { }
end
sheet = …Run Code Online (Sandbox Code Playgroud) 我想确定用户输入(UITextField)中的字符串值是否为"空白"(如果它不是nil).检查是否[textField.text isEqualToString:""]还不够,因为我想避免任何空白/空白输入(比如说几个空格字符).
在这篇StOv帖子中,似乎有一个很好的解决方案可以解决我的特定问题.
基本上它是这样的,但我怀疑必须(或应该)是一个更好的方法:
NSString *strResult;
NSScanner* scanner = [NSScanner scannerWithString:textField.text];
BOOL hasValidChars = [scanner scanUpToCharactersFromSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]
intoString:&strResult];
// if hasValidChars == YES, we've got nonwhite space chars collected into strResult
Run Code Online (Sandbox Code Playgroud)
这显然只适用于我的特定情况,即使这样,如果第一个字符是空格但是我想要的数据也会失败.所以,我意识到我已经被Ruby搞砸了,但是必须有一个尝试过的真正的习惯用于修剪Cocoa中的字符串.
Aaaand答案已经在那里了,我道歉:
NSString -stringByTrimmingCharactersInSet:会这样做:
返回通过从接收器的两端移除给定字符集中包含的字符而生成的新字符串.
我仍然很想知道是否有人有其他/首选方式这样做.
我承认在SO上已经存在这些问题,但它缺乏实现细节,工作答案,我想更具体,所以我认为一个新问题是有道理的.显然,让我知道如果我错了,我们可以尝试在那里重新启动线程.
基本上,我想在用户按住标签时将UILabel中的文本复制到粘贴板.老实说,不难做到.但是,我认为提供视觉反馈的最佳方法是使用"复制"菜单选项提示用户UIMenuController.
根据"iPhone应用程序编程指南"的"事件处理"部分,特别是" 复制","剪切"和"粘贴操作"部分,应该可以从自定义视图中提供复制,剪切和/或粘贴操作.
因此,我已经按照指南所描述的以下实现对UILabel进行了分类,但UIMenuController将不会显示.指南中没有任何迹象表明还有其他任何操作要求,并且NSLog语句会打印到控制台,指示当我按住标签时正在执行选择器:
//
// CopyLabel.m
// HoldEm
//
// Created by Billy Gray on 1/20/10.
// Copyright 2010 Zetetic LLC. All rights reserved.
//
#import "CopyLabel.h"
@implementation CopyLabel
- (void)showCopyMenu {
NSLog(@"I'm tryin' Ringo, I'm tryin' reeeeal hard.");
// bring up editing menu.
UIMenuController *theMenu = [UIMenuController sharedMenuController];
// do i even need to show a selection? There's really no point for my implementation...
// doing it any way to see if …Run Code Online (Sandbox Code Playgroud) 在我的一个cocoa应用程序中,有一种方法可以对sqlite数据库的模式执行一些可能具有破坏性的操作,因此首先我们制作数据库的回滚副本,如果有错误,我们调用以下方法来替换带有回滚文件的db文件.请注意,我绝对希望db文件替换为回滚!
- (BOOL)restoreDatabaseFromFileAtPath:(NSString *)backupPath error:(NSError **)error {
NSFileManager *fm = [NSFileManager defaultManager];
// get the db paths
NSString *databasePath = [sharedManager pathToDatabase];
// insist that the two files be present
NSAssert1([fm fileExistsAtPath:databasePath], @"no db file at %@", databasePath);
NSAssert1([fm fileExistsAtPath:backupPath], @"no backup db file at %@", backupPath);
// remove the original to make way for the backup
NSLog(@"removing the file at the primary database path...");
if ([fm removeItemAtPath:databasePath error:error]) {
// now move the backup to the original location
NSLog(@"moving …Run Code Online (Sandbox Code Playgroud) associations ×1
cocoa ×1
cocoa-touch ×1
copy-paste ×1
csv ×1
excel ×1
iphone ×1
macos ×1
objective-c ×1
ruby ×1
string ×1
utf-16 ×1
utf-8 ×1
whitespace ×1
xml ×1