Ruby on rails 使用redirect_to将模型属性传递给Rails视图

Ruby on rails 使用redirect_to将模型属性传递给Rails视图,ruby-on-rails,Ruby On Rails,在从控制器中的操作中将模型属性成功设置为新值后,我尝试将其传递给视图。但是这个变量在到达视图时总是为零,所以我不能用它来有条件地显示内容。我应该补充一点,这个属性不是数据库中的字段。我错过了什么/做错了什么 以下是我的模型中的代码: attr_accessor :mode #getter def mode @mode end #setter def mode=(val) @mode = val end …在控制器中: @report.mode = "t" redirect_to edi

在从控制器中的操作中将模型属性成功设置为新值后,我尝试将其传递给视图。但是这个变量在到达视图时总是为零,所以我不能用它来有条件地显示内容。我应该补充一点,这个属性不是数据库中的字段。我错过了什么/做错了什么

以下是我的模型中的代码:

attr_accessor :mode

#getter
def mode
 @mode
end

#setter
def mode=(val)
 @mode = val
end
…在控制器中:

@report.mode = "t"
redirect_to edit_report_path(@report)
…在我看来:

<%= build_report(@report.mode) %>

…但是这个helper方法从未获得我刚才在控制器中设置的变量。它是零。有什么好处?很明显,我在这里遗漏了一些基本的东西,因为这看起来应该是直截了当的。如有任何见解,将不胜感激。
谢谢。

问题是
重定向到
;您将向客户端返回一个响应,该响应使客户端使用不同的url重做请求。在第二个请求中,没有设置模式,因为在结束第一个请求之前没有保存模式。

这里的问题在于
重定向到
。当您重定向到其他地方时,所有实例变量都将丢失。因此,当您设置
@report.mode=“t”
时,它会设置属性。但当你重定向时,数据就丢失了

我假设
在edit\u report.html.erb中,并且设置“mode”时的代码不在编辑操作中。如果是这种情况,您可以将
report.mode
传递到url中的编辑操作,如下所示:

 build_report(@report.mode, :mode => "t")

edit_report_path
生成一个ID为
@report
的URL

redirect_to
实质上创建了一个全新的请求,并转到该URL。当它进入
edit
时,它所拥有的只是ID。通常这很好-它会查找对象并继续运行,但当然它不会有您设置的非db字段

有几种方法可以解决这个问题。您可以使用:render进入编辑页面-然后@report将设置字段

@report.mode = "t"
render :action => edit and return

或者,您可以将
模式
设置为一个数据库字段。

这是我使用的:render(:action=>'edit',:object=>@report)并返回,感谢大家。。。