Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 4 余烬数据:尝试在Rails 4后端持久化子记录_Ruby On Rails 4_Ember.js_Ember Data - Fatal编程技术网

Ruby on rails 4 余烬数据:尝试在Rails 4后端持久化子记录

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

我已经寻找了很多答案,我觉得我很接近

我有问答模型

轨道--

这个小测验有很多问题

这个问题有很多答案

余烬--

通过一个简单的save(),我可以将一个新的测试保存到Rails后端。 我还侧面加载了JSON,因此它看起来如下所示:

{"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}