小编xph*_*xph的帖子

使用active-model-serializers为act-as-taggable标记加载JSON时出错

在Ruby 2/Rails 4应用程序中,我尝试将actions-as-taggable-on与active_model_serializers结合使用,以创建一个JSON API,可以输出我的标签以及其他模型参数.

首先是这个问题的一些背景/动机:JSON正在被提供给ember/ember-data,截至本文撰写时,它已经删除了对JSON中嵌入式记录的支持.文档中有关于此的假设修复,但我觉得它很笨拙,实际上还没有让它起作用.由于我是一个Ember新手并且对Rails感觉更舒服,我想我会尝试以另一种方式解决问题,方法是将标记记录与文档记录一起加载.我更喜欢这个解决方案,因为它对我的应用程序更有意义,但我也无法让它工作.

这是一个例子:假设我有一个使用act-as-taggable-on的Document模型:

class Document < ActiveRecord::Base
  acts_as_taggable
  # other code omitted
Run Code Online (Sandbox Code Playgroud)

我用一个带有一个标签的文档设置了数据库.现在我们考虑以下情况:

1.完整对象嵌入:使用以下序列化程序:

class DocumentSerializer < ActiveModel::Serializer
  attributes :id
  has_many :tags
Run Code Online (Sandbox Code Playgroud)

我的JSON具有以下格式(使用Rails 4 UUID):

{
  "documents": [
    {
      "id": "c41460fa-2427-11e3-8702-0800270f33f4",
      "tags": [
        {
          "id": "a33fc396-2428-11e3-8eeb-0800270f33f4",
          "name": "test"
        }
      ]
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

2. ID嵌入:使用序列化器

class DocumentSerializer < ActiveModel::Serializer
  attributes :id
  has_many :tags, embed: :id
Run Code Online (Sandbox Code Playgroud)

我的JSON现在看起来像:

{
  "documents": [
    {
      "id": "c41460fa-2427-11e3-8702-0800270f33f4",
      "tag_ids": [
        "a33fc396-2428-11e3-8eeb-0800270f33f4"
      ]
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

3.使用标签嵌入的ID Sideloaded:根据active_model_serializers文档,我应该能够做到

class …
Run Code Online (Sandbox Code Playgroud)

json ruby-on-rails acts-as-taggable-on active-model-serializers

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

使用Date对象调用Date构造函数

声明的JS文档Date有四种方法可以使用Date构造函数.来自https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date:

new Date();
new Date(value); // integer
new Date(dateString); // string
new Date(year, month[, day[, hour[, minutes[, seconds[, milliseconds]]]]]);
Run Code Online (Sandbox Code Playgroud)

但是,通过传入有效的日期对象,似乎有第五种方法来使用构造函数.例如,以下在chrome控制台中工作正常:

date = new Date() // Wed Sep 02 2015 16:30:21 GMT-0700 (PDT)
date2 = new Date(date) // Wed Sep 02 2015 16:30:21 GMT-0700 (PDT)
Run Code Online (Sandbox Code Playgroud)

它们是不同的对象,因此它似乎是一种复制日期的简单方法:

date2 === date // false
date.setMonth(1) // 1422923421090
date // Mon Feb 02 2015 16:30:21 GMT-0800 (PST)
date2 // Wed Sep 02 2015 16:30:21 GMT-0700 (PDT)
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:

  1. 为什么这不在官方文档中?我错过了什么吗?
  2. 这是构造函数的官方支持使用吗?它适用于所有平台/浏览器吗? …

javascript

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

Rails 4.0整数ID - > UUID/Add选项散列到ActiveRecord Migration中的表?

stackoverflow新手在这里,虽然我已经多次在这里寻找过去有用的答案.这是我的第一个问题,所以请你好:)

我一直试图通过添加(或修改)create_table命令附带的选项哈希来弄清楚如何在Rails中的ActiveRecord Migration中更改表.更具体地说,我正在尝试将使用整数ID的模型转换为在Rails 4.0和postgresql 9.1.9中使用UUID的模型.

例如,我的架构目前看起来像这样:

create_table :users do |t|
  t.string :name
  t.timestamps
end
Run Code Online (Sandbox Code Playgroud)

我想创建一个迁移将其更改为这个(继UUID指南这里):

create_table :users, id: false do |t|
  t.primary_key :id, :uuid, :default => 'uuid_generate_v1()'
  t.string :name
  t.timestamps
end
Run Code Online (Sandbox Code Playgroud)

我可以添加/删除/更改列,但我无法弄清楚如何将其id: false放入表中.到目前为止,我想出的唯一方法是通过完全核对表格drop_table :users,然后重新创建它,这对我来说似乎效率低下.是否有一些ActiveRecord方法我可以调用添加选项哈希?试图谷歌它没有成功,但也许我不知道什么是正确的搜索查询?

任何帮助,将不胜感激.提前致谢!

编辑:语法.

uuid ruby-on-rails rails-migrations ruby-on-rails-4

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