Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.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 RubyonRails:更新关联的属性_Ruby On Rails_Ruby_Associations - Fatal编程技术网

Ruby on rails RubyonRails:更新关联的属性

Ruby on rails RubyonRails:更新关联的属性,ruby-on-rails,ruby,associations,Ruby On Rails,Ruby,Associations,在我的控制器中,我有以下功能: def sort params[:order].each do |key,value| Question.find(value[:id]).update_attribute(:order,value[:order]) end render :nothing => true end 这非常适用于更新“问题”项的订单列 不过,我现在已将order列移动到与问题关联的新表'question_sections' class

在我的控制器中,我有以下功能:

def sort
    params[:order].each do |key,value|
      Question.find(value[:id]).update_attribute(:order,value[:order])
    end
    render :nothing => true
  end
这非常适用于更新“问题”项的订单列

不过,我现在已将order列移动到与问题关联的新表'question_sections'

class Question < ActiveRecord::Base
    has_many :sections, :through => :question_sections
    belongs_to :section
    has_many :question_sections
    default_scope { order(order: :asc) }

    accepts_nested_attributes_for :section, :reject_if => :all_blank, allow_destroy: true
    accepts_nested_attributes_for :question_sections, :reject_if => :all_blank, allow_destroy: true
end
类问题:问题\u部分
属于:节
有很多:问题部分
默认范围{order(order::asc)}
接受\u嵌套的\u属性\u for:section,:拒绝\u if=>:all\u blank,allow\u destroy:true
接受以下内容的\u嵌套\u属性\u:问题\u部分,:拒绝\u如果=>:全部\u为空,允许\u销毁:true
结束
我正在尝试调整排序函数以更新“问题部分”中的“顺序”列,但遇到了问题


关于函数应该是什么样子的任何帮助?

如果您使用嵌套属性,您应该调用
includes
方法,然后迭代每个问题部分:

def sort
    params[:order].each do |key,value|
        questions = Question.includes(:question_sections).find(value[:id])
        questions.question_sections.each { |q| q.update_attribute(:order,value[:order]) }
    end
    render :nothing => true
end
这将问题分为两部分,加载所需的所有问题部分:

1) 加载问题的所有问题部分: 问题量

从“问题”中的“问题”中选择“问题”。“id”=?限制1[[“id”,1]]

选择“问题部分”。*从(1)中的“问题部分”中选择“问题id”

2) 更新此问题的所有部分 问题部分更新

更新“问题部分”设置“顺序”=?,“更新位置”=?其中“问题”部分“.id”=?[2017-03-09 13:24:42.452593],[id],1]]


我认为如果您在这里为
Question
模型使用嵌套的_属性,那么Rails应该自动更新
QuestionSection

控制器应如下所示:

def sort
  @question = Question.find_by(id: params[:id])
  @question.update_attributes(question_params)
end

private

def question_params
  params.require(:question).permit!
end
接收到控制器的参数应如下所示:

params = { question: {
  abc: 'abc', question_sections_attributes: [
    { order_id: 1, ... },
    { order_id: 2, ... },
    { order_id: 3, ... }
  ]
}}

我希望这有帮助:)

我可能错了,但是如果问题有嵌套的问题部分属性,那么顺序id应该出现在
参数[:问题部分属性]
中。谢谢,但这会更新问题表,但我希望它更新问题部分表。完成了,谢谢!我也尝试过类似的方法,但没有对“问题”部分进行相应的操作。我知道,
.update\u attribute
方法是一种实例方法,因此必须在实例中执行。
def sort
  @question = Question.find_by(id: params[:id])
  @question.update_attributes(question_params)
end

private

def question_params
  params.require(:question).permit!
end
params = { question: {
  abc: 'abc', question_sections_attributes: [
    { order_id: 1, ... },
    { order_id: 2, ... },
    { order_id: 3, ... }
  ]
}}