我在stack overflow post中的答案上构建了我的控制器代码,但我仍然得到“No Block Given(YIEld)”错误.
我刚刚开始使用Ruby和Rails,我还没有找到一个完整的解释(很多基本的例子)块和产量,它给了我我需要的东西.
我的代码看起来像这样:
def select_save @class = params[:class] @student_ID = params[:ID] @class.each do |ID| old_subject = Subject.find(ID) new_subject = old_subject.dup new_subject.student_ID = @student_ID new_subject.save Assignment.find_each.where(:subject_ID => ID) do |assignments| assignments.each do |a| new_assignment = a.dup new_assignment.subject_ID = new_subject.ID new_assignment.save end end end respond_to do |format| format.HTML { redirect_to @student,:notice => 'Subject and assignments created.' } end end
并且错误指向find_each的行.
我知道我需要一个块才能屈服,但在这个特殊情况下看起来究竟是什么让我失望.
谢谢你的任何建议.
解决方法@H_502_28@ 你将一个块传递给find_each的where和no块.你不能这样做.你需要反转find_each以及这一行的位置,顺序很重要,因为块被传递给最后调用的方法:Assignment.find_each.where(:subject_ID => ID) do |assignments|
它应该是:
Assignment.where(:subject_ID => ID).find_each do |assignments|
您的下一个问题是您正在尝试迭代分配,这是一个分配. find_each已经为你做了迭代,一次将一个赋值传递给块.该块应为:
Assignment.where(:subject_ID => ID).find_each do |assignment| new_assignment = assignment.dup new_assignment.subject_ID = new_subject.ID new_assignment.saveend
我将假设你的主题有很多作业,因为你的作业类中有一个subject_ID.如果是这种情况,编写循环的最终和最正确的方法是:
old_subject.assignments.each do |assignment| new_assignment = assignment.dup new_assignment.subject_ID = new_subject.ID new_assignment.saveend总结
以上是内存溢出为你收集整理的ruby-on-rails-3 – 本地跳转错误find_each上没有给定(yield)错误的块全部内容,希望文章能够帮你解决ruby-on-rails-3 – 本地跳转错误find_each上没有给定(yield)错误的块所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)