Ruby on rails 4 余烬数据:尝试在Rails 4后端持久化子记录
我已经寻找了很多答案,我觉得我很接近 我有问答模型 轨道-- 这个小测验有很多问题 这个问题有很多答案 余烬-- 通过一个简单的save(),我可以将一个新的测试保存到Rails后端。 我还侧面加载了JSON,因此它看起来如下所示:Ruby on rails 4 余烬数据:尝试在Rails 4后端持久化子记录,ruby-on-rails-4,ember.js,ember-data,Ruby On Rails 4,Ember.js,Ember Data,我已经寻找了很多答案,我觉得我很接近 我有问答模型 轨道-- 这个小测验有很多问题 这个问题有很多答案 余烬-- 通过一个简单的save(),我可以将一个新的测试保存到Rails后端。 我还侧面加载了JSON,因此它看起来如下所示: {"questions":[ {"id":214,"prompt":"Is this a question?"} //--added manually--// ], "quizzes":[{"id":185,"title":"First Quiz","q
{"questions":[
{"id":214,"prompt":"Is this a question?"} //--added manually--//
],
"quizzes":[{"id":185,"title":"First Quiz","questions":[214]},
{"id":186,"title":"Second Quiz","questions":[]},
{"id":187,"title":"Third Quiz","questions":[]},
...
...
]}
以下是我在寻找答案的过程中见过的一种模式:
余烬问题遥控器:
Quizzmob.QuestionsNewController = Ember.ArrayController.extend(
needs: 'quiz'
quiz: Ember.computed.alias('controllers.quiz.model')
prompt: ''
actions:
save: ->
quiz = @get('controllers.quiz.content')
quiz.save()
prompt = @get('prompt')
question = @store.createRecord "question",
prompt: prompt
@set('prompt', '')
questions = quiz.get('questions')
questions.addObject(question)
question.save().then =>
quiz.save()
)
我的控制台显示所有成功调用,我的服务器也显示成功调用:
Processing by Api::V1::QuestionsController#create as JSON
Parameters: {"question"=>{"prompt"=>"new", "quiz_id"=>"185"}}
Completed 200 OK
Processing by Api::V1::QuizzesController#update as JSON
Parameters: {"quiz"=>{"title"=>"First Quiz"}, "id"=>"185"}
Completed 200 OK
创建了一个新的问题模型,我在我的Ember调试器中看到了它,但当我刷新页面时,该模型消失了。我在某个地方读到,它可能与我的序列化程序有关,我可能需要添加一个“serializeHasMany”方法来定制它……但对于一个看似简单而常见的任务来说,这似乎需要做很多工作。不确定是不是“余烬之路”
非常感谢你的帮助。我将用所需的任何其他信息更新问题。我的数据库中有类似类型的关系,我想我知道你的问题所在。有了灰烬,这种关系就不会从另一方面得到挽救。因此,关系将在数据库的问题表中完全定义。要查找测验中的所有问题,您必须根据测试所使用的参数筛选数据库
{quiz_id: SOME_ID}
现在要问你自己的一个问题是,这些问题能在一次测验中出现吗?如果它们可以出现在许多测试中,那么您就有了很多关系,这可能需要更改序列化程序,就像我自己所做的那样
总之,您的问题列表没有被更新或发送到服务器的原因是,您只能将关系添加到问题本身,因此Question.set('quick',some_quick)。你不能从测验中得到所有的问题
我希望这会有所帮助,对所有的措辞表示抱歉。我尝试在问题初始化中添加一个小测验,但我遇到的问题是rails 4中的强参数。”“quick”不是MyRails后端中“question”的允许参数。这是一个很好的问题。我不一定希望问题属于测验。这可能是一种多人的关系。谢谢你的提示,这会让我在搜索时更加专注。很高兴我能帮上忙。仅供参考,这是我用来保存我的许多人的代码。如果需要,可以节省一些搜索时间
APP.ApplicationSerializer=DS.ActiveModelSerializer.extend({primaryKey:'u id',serializeHasMany:function(record,json,relationship){var key=relationship.key;//不管这是哪种hasMany关系,json[key]=Ember.get(record,key).mapBy('id');})代码>非常感谢!那肯定很快就会派上用场的。
{quiz_id: SOME_ID}