我正在尝试将模型属性传递给视图,之后成功地将其设置为控制器中的操作内的新值.但是这个变量在到达视图时总是为零,所以我不能用它来有条件地显示东西.我应该补充一点,这个属性不是数据库中的一个字段.我错过了什么/做错了什么?
这是我模型中的代码:
attr_accessor :mode
#getter
def mode
@mode
end
#setter
def mode=(val)
@mode = val
end
Run Code Online (Sandbox Code Playgroud)
......在控制器中:
@report.mode = "t"
redirect_to edit_report_path(@report)
Run Code Online (Sandbox Code Playgroud)
......在我看来:
<%= build_report(@report.mode) %>
Run Code Online (Sandbox Code Playgroud)
...但是这个辅助方法永远不会得到我刚刚在控制器中设置的变量.这是零.是什么赋予了?显然我在这里缺少一些基本的东西,因为这看起来应该是直截了当的.任何见解将不胜感激.谢谢.
edit_report_path@report生成一个 URL,其中包含 ID 。
redirect_to本质上是创建一个全新的请求,然后转到该 URL。当到达 时edit,它所拥有的只是 ID。通常这很好 - 它会查找对象并继续前进,但当然它不会包含您设置的非数据库字段。
有几种方法可以解决这个问题。您可以使用 :render 代替进入编辑页面 - 然后 @report 将设置字段。
@report.mode = "t"
render :action => edit and return
Run Code Online (Sandbox Code Playgroud)
或者,您可以创建mode一个数据库字段。