Rails:为表中的每个条目创建控制器实例变量

时间:2014-06-24 02:40:00

标签: ruby-on-rails ruby instance-variables

在我的控制器的show方法中,我无法为每个'主题'创建实例变量。在我的数据库中。 " @ pie_correct"变量有效,但问题出在" .each"循环 - 我收到错误"语法错误,意外' =',期待关键字_end"我应该怎么改变这个?

@pie_correct = TestQuestions.where(:correct => true).joins(:test).merge(Test.where(user_id: current_user))

Subject.all.each do |s|
  "@subject_ + #{s.id} + _correct" = @pie_correct.joins(:question).merge((Question.all).joins(:subject).merge(Subject.where(id: s.id)))
end

感谢。

2 个答案:

答案 0 :(得分:3)

您正在寻找instance_variable_set方法:

Subject.all.each do |s|
  instance_variable_set "@subject_#{s.id}_correct", @pie_correct.joins(:question).merge((Question.all).joins(:subject).merge(Subject.where(id: s.id)))
end

我也相信你不需要内插字符串中的加号。

答案 1 :(得分:2)

<强>系统

道具Chris Peters以获得答案(这是正确的)

-

我想在这里提出一个关于你的系统的观点。为什么要设置多个instance variables

由于任何其他原因造成的损失,我建议这违反了DRY programming principles的Rails以及单Source Of Truth的想法 - 这意味着您需要设置一次数据,并按你的意愿使用它。

我个人会设置一个单独的实例变量,然后通过它来拉取关联数据。