在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
声明的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)
所以我的问题是:
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方法我可以调用添加选项哈希?试图谷歌它没有成功,但也许我不知道什么是正确的搜索查询?
任何帮助,将不胜感激.提前致谢!
编辑:语法.