小编Cha*_*zak的帖子

RoR嵌套:include包含to_xml/to_json中的子资源

我有一个奇怪的数据模型情况,所以也许我的整个方法是错误的.这是我正在做的事情:

我有一个名为Bird的类和一个名为Color的简单类.从概念上讲,每只鸟有两种与颜色相关的关联,一种用于男性颜色,一种用于女性颜色.我处理这个的方法是使用一个名为BirdColoration的连接模型,它属于一个鸟和一个颜色,并有一个额外的布尔字段来判断颜色是针对男性还是女性.因此,每只鸟实际上都与BirdColoration有着很好的关系,而且它通过BirdColoration与Color-toyman相关.如果这听起来合理,那么继续阅读.否则,停下来告诉我为什么这是错的!

我需要能够将鸟桌作为json转储.以前,当每只鸟只有一个与颜色有关联时,我可以使用:include来包含每个鸟的颜色在json转储中.现在,我将BirdColorations包括在转储中,但我仍然需要自己使用颜色模型.我可以单独包括每只鸟的颜色和颜色,然后在解析时匹配它们,但我更愿意直接包括每种颜色的颜色.就像是

      format.json  { render :json => @birds.to_json(:include => [{:bird_colorations => :color}, :seasons, :habitats, :image_holders]) }
Run Code Online (Sandbox Code Playgroud)

但是,上述方法不起作用.我认为这应该是可能的.任何人都可以指出我如何处理这个问题的正确方向?

现在,我将分别包括每只鸟的颜色和颜色,并在解析时匹配它们.至少我知道这会奏效.

谢谢!

json ruby-on-rails include has-many-through

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

如何使用长度超过990个字符的行发送csv附件?

好的.我认为这个问题与我的rails应用程序有关,但它似乎与电子邮件附件的更深层次的工作有关.

我必须从我的rails应用程序发送一个csv文件到仓库,该仓库在我的商店中完成订单.仓库具有CSV格式,具有讽刺意味的是,CSV文件的标题行超长(1000+个字符).

当我收到测试电子邮件时,我在csv文件的标题行中得到了一个换行符,并且无法弄清楚是什么把它放在那里.然而,一些谷歌搜索终于显示了原因:附加文件的行字符限制为1000.为什么?我不知道.这看起来很荒谬,但我仍然不得不以某种方式发送这个csv文件.

我尝试手动将附件的MIME类型设置为text/csv,但这没有用.有人知道如何解决这个问题吗?

一些相关的Google搜索结果:http://www.google.com/search? client = safari&rls = en&q = csv + wrapped +990&ie = UTF-8&e = UTF-8

更新

我试过在base64中对附件进行编码,如下所示:

    attachments['205.csv'] = {:data=> ActiveSupport::Base64.encode64(@string), :encoding => 'base64', :mime_type => 'text/csv'}
Run Code Online (Sandbox Code Playgroud)

这似乎没有什么不同.我通过Sparrow for Mac收到了me.com帐户的电子邮件.我将尝试使用gmail的web界面.

csv email attachment mime-types sendgrid

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

如何从视图控制器创建故事板segue到自身?

是否可以从视图控制器创建故事板segue到自身?我有一堆具有相关实体的实体.我希望能够使用显示实体的相同视图控制器显示相关实体.但我似乎无法创建一个将显示原始视图控制器的新实例的segue.

是不允许的?谢谢!

uiviewcontroller ios uistoryboard

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

JS文件双重包含在rails app中

我有几个rails 3.1应用程序,我在所有这些都遇到了这个问题.

我有一堆js文件包含在我的application.js文件中.这是我的application.js:

//= require jquery
//= require jquery-ui
//= require jquery_ujs
//= require_self
//= require_tree .
Run Code Online (Sandbox Code Playgroud)

问题是,当development.rb,我将config.assets.debug设置为true时,我的所有javascript文件都会被包含在标头中.实际上,它们并未明确地包含在内,而是单独包含一次,一次包含在已编译的application.js文件中.js包含标签如下所示:

<script src="/assets/jquery.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery-ui.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery_ujs.js?body=1" type="text/javascript"></script>
<script src="/assets/application.js?body=1" type="text/javascript"></script>
<script src="/assets/animation_elements.js?body=1" type="text/javascript"></script>
<script src="/assets/categories.js?body=1" type="text/javascript"></script>
<script src="/assets/facebox.js?body=1" type="text/javascript"></script>
…
Run Code Online (Sandbox Code Playgroud)

那到底是什么?结果是各种JQuery onClick()行为正在执行两次和其他废话.这有什么问题?为了记录,这是我的整个development.rb文件:

Geobooks::Application.configure do
  # Settings specified here will take precedence over those in config/application.rb

  # In the development environment your application's code is reloaded on
  # every request.  This slows down response time but is perfect for development
  # …
Run Code Online (Sandbox Code Playgroud)

javascript ruby-on-rails asset-pipeline

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

NSPredicate使用获取请求返回无结果,适用于阵列过滤

我的情况很简单:我的核心数据存储中有一些记录.它们的一个属性是名为"localId"的字符串.有一点,我想找到具有特定localId值的记录.显而易见的方法是使用NSFetchRequest和NSPredicate.但是,当我设置它时,请求返回零记录.

但是,如果我使用不带谓词的获取请求,返回所有记录,只是遍历它们寻找目标localId值,我确实找到了我正在寻找的记录.换句话说,记录在那里,但是获取请求找不到它.

我使用获取请求和谓词的其他方法都按预期工作.我不知道为什么这个失败了.

我想做这个:

- (void)deleteResultWithLocalID:(NSString *)localId {
    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    [request setEntity:[NSEntityDescription entityForName:@"WCAAssessmentResult" inManagedObjectContext:context]];
    [request setPredicate:[NSPredicate predicateWithFormat:@"localId == %@", localId]];
    NSError *error = nil;
    NSArray *results = [context executeFetchRequest:request error:&error];
    NSAssert(error == nil, ([NSString stringWithFormat:@"Error: %@", error]));
    if ([results count]) [context deleteObject:[results objectAtIndex:0]];
    else NSLog(@"could not find record with localID %@", localId);
    [self saveContext];
}
Run Code Online (Sandbox Code Playgroud)

但我最终不得不这样做:

- (void)deleteResultWithLocalID:(NSString *)localId {
    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    [request setEntity:[NSEntityDescription entityForName:@"WCAAssessmentResult" inManagedObjectContext:context]];
    NSError *error = nil;
    NSArray *results …
Run Code Online (Sandbox Code Playgroud)

core-data nspredicate nsfetchrequest ios

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

核心数据不会持续对数据库的属性更新

我正在使用NSManagedObject的子类.实际上,它继承自一个继承自NSManagedObject的类的类(这应该不是问题,对吗?).

问题

在对对象的属性进行更改后,对象会记住其生命周期的更改,但更改永远不会保存到数据库中.

我怎么知道这个?

我知道这是因为:

  • 当我重新启动应用程序时,我所做的更改将丢失.
  • 告诉上下文刷新对象 - 在我对对象进行了更改并告诉上下文保存之后 - 在我进行更改之前将对象的值设置回原始状态.
  • 在模拟器中运行应用程序时,我可以查看Finder中的sqlite数据库文件,当我尝试保存上下文时,它的修改日期不会更新.

没有任何东西写入数据库!

上下文

我正在使用自动生成的委托方法来创建商店协调器和上下文.然后我按照文档中的建议将上下文传递给它们的init方法中的视图控制器.这家商店是SQLite.

我能够成功地将对象插入数据库并读取它们.我甚至可以对新插入的对象进行属性更改并成功保存.当对象被拉回数据库时,我似乎无法更新对象属性.

通过来自另一个对象的关系从商店中获取对象.在更改其属性后,我调用上下文的save方法.但是,在这样做之前,我调用对象的isUpdated方法和上下文的hasChanges方法,并且都返回false.它们不应该返回true,因为我刚刚更改了对象的属性但没有保存上下文吗?

更多

如果我在保存上下文之前调用对象的committedChanges方法,但是,传入我已更改的属性的名称,我会返回属性的正确值.我不确定这意味着什么.我原以为这意味着对象的新属性值已成功保存,但很明显它们没有保存.

我知道结果对象是在上下文中注册的.如果我打电话

[[result managedObjectContext] refreshObject:result mergeChanges:YES];
Run Code Online (Sandbox Code Playgroud)

对象恢复为原始属性值.这意味着上下文存在,并且它是从中获取记录的相同上下文.这意味着新属性值永远不会写入数据库.

一些代码

这是我正在探讨所有这些事情的代码.我的代码中有其他地方我正在进行属性更改,但更改永远不会保存.

- (IBAction)statusControlChanged:(UISegmentedControl *)control {
WCAAssessmentResult *result = [self currentResult];

    /* printing the existing property values */
    if (![result.complete boolValue]) NSLog(@"result is in progress!");
    else if ([result.passed boolValue]) NSLog(@"result is passed!");
    else NSLog(@"result is not passed!");

    /* changing the property values */
    switch (control.selectedSegmentIndex) {
        case 0:
            NSLog(@"setting incomplete");
            result.complete = [NSNumber numberWithBool:NO];
            break; …
Run Code Online (Sandbox Code Playgroud)

iphone cocoa-touch core-data nsmanagedobject ios

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

为什么$(window).load()工作但不是$(document).ready()?

我正在使用rails 3应用程序,我想使用可排序列表.我正在使用此处显示的方法.我的应用程序使用JQuery,我的应用程序布局中包含一个js文件,用于调用$(document).ready()设置一些可视化内容.这似乎工作正常.

但是,当我尝试$(document).ready()在我的视图模板中调用content_for :javascript以设置可排序列表时,该代码永远不会触发.我的yield :javascript布局文件中有必要的调用,如果我加载页面并查看源代码,一切看起来都很好.但是代码永远不会运行 - 即这个$(document).ready()永不触发的实例.

我刚刚发现,如果我替换$(document).ready(),$(window).load()那么我的js代码运行.

所以我的问题是:为什么会$(document).ready()失败并且$(window).load()有效?

这有效:

<% content_for :javascript do %>

<script>
   $(window).load(function(){
     alert('it works!');
   });
</script>
<% end %>
Run Code Online (Sandbox Code Playgroud)

这不起作用

<% content_for :javascript do %>

<script>
   $(document).ready(function(){
            alert('it works!');
   });
</script>
<% end %>
Run Code Online (Sandbox Code Playgroud)

这是布局

<!DOCTYPE html>
<html>
  <head>
    <title><%= content_for?(:title) ? yield(:title) : "Untitled" %></title>

    <!-- Reset Stylesheet -->
      <%= stylesheet_link_tag "reset" …
Run Code Online (Sandbox Code Playgroud)

javascript jquery ruby-on-rails document-ready

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

谷歌地图信息窗口缺少图像/角落

我的谷歌地图实例中的信息窗口看起来很有趣:信息窗口缺少背景图像

构成信息窗口图形的角落和四肢的一些图像似乎缺失.知道为什么会这样吗?我正在试验,但尚未弄明白.

我正在使用gmap3,一个用于谷歌V3 API的JQuery包装器.这是我设置地图的代码(javascript/haml):

  <script>


$(window).load(function() {
  $('#map').gmap3();
  var bounds = new google.maps.LatLngBounds ();
  -@areas.each do |area|
    bounds.extend(new google.maps.LatLng(#{area.latitude}, #{area.longitude}));
    $('#map').gmap3(
    {
    action:'addMarker',
    latLng:[#{area.latitude},#{area.longitude}],
    events:{click:function(marker, event){
    $(this).gmap3({action:'clear',list:['infoWindow']});
    $(this).gmap3(
    {
    action:'addInfoWindow',
    latLng:marker.getPosition(),
    infowindow:
    {content:"#{escape_javascript(link_to area.name, area)}<br>#{escape_javascript(image_tag area.image_holder.image.url(:thumb)) if area.image_holder.present?}"}
    }
    )}}
    }
    );
  $('#map').gmap3('get').fitBounds(bounds);
  $('.clickable_row').click(function() {
  var id = $(this).attr('id');
  window.location = '#{areas_path}' + '/' + id;
  });
  });
  </script>
Run Code Online (Sandbox Code Playgroud)

google-maps ruby-on-rails jquery-gmap3

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

fields_for for nested属性不返回任何内容

我正在尝试在Rails 3.0.3中创建一个嵌套的模型表单.这是我的模特:

class Bird < ActiveRecord::Base
  has_one :taxon, :as => :organism
  accepts_nested_attributes_for :taxon
end

class Taxon < ActiveRecord::Base
  belongs_to :organism, :polymorphic => true
end
Run Code Online (Sandbox Code Playgroud)

这是控制器方法:

def new
  @bird = Bird.new
  @bird.build_taxon
end
Run Code Online (Sandbox Code Playgroud)

这是表格:

New Bird
<% form_for @bird do |f| %>
<p>
    <%= f.label :wingspan %>
    <%= f.text_field :wingspan %>
</p>
<p>
    <%= f.label :body_length %>
    <%= f.text_field :body_length %>
</p>
<% f.fields_for :taxon do |builder| %>
    <%= builder.label :common_name %>
    <%= builder.text_field :common_name %>
    <%= builder.label :genus_name %>
    <%= …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails nested-forms fields-for

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