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, ... }
]
}}