Rails,加入/包含在实例变量上

时间:2011-07-05 19:14:47

标签: ruby-on-rails ruby-on-rails-3

让控制器更新动作,更新@foo。如果有错误,我想通过join / include向实例变量添加信息。如

if @foo.update_attributes(params[:foo])
  format.js
else
  @foo = @foo.includes(:other_stuff).joins(:more_stuff)
  format.js
end

这不起作用(@foo = @foo ....)。有没有办法让这个工作?即获取要输入变量的错误代码和参数。

2 个答案:

答案 0 :(得分:0)

您可能有标准的生成器代码来查找您正在使用的实例@foo(@foo = Foo.find(params[:id]))。在这种情况下,@ foo不是您期望的ActiveRecord::Relation。你需要运行另一个查询来加载带有包含的记录,即@foo = Foo.includes(:other_stuff).joins(:more_stuff).find(params[:id]),但我不认为这样做会带来很多好处。

答案 1 :(得分:0)

就像Ogz的向导所说,当你想要将调用链接到它时,@foo不是Arel对象。变量本身作为Arel对象保留,直到需要它的数据。就像当你试图打电话给.update_attributes时一样。你需要第二个查询(比如Wizard of Ogz提到),或者第二个变量(最终会运行第二个查询),如:

@bar = @foo
if @foo.update_attributes(params[:foo])
  format.js
else
  @foo = @bar.includes(:other_stuff).joins(:more_stuff)
  format.js
end