use*_*677 5 ruby-on-rails instance-variables ruby-on-rails-4
什么会导致我的实例变量 @product 无法为重定向设置/传递。Product 是一个 ActiveModel 对象,而不是 ActiveRecord。更具体地说,@product 变量没有出现在 redirect_to(new_services_path) 或 redirect_to(home_path) 页面中。因为@product 变量需要在我的每页上的页脚中填充一个表单。
应用控制器:
class ApplicationController < ActionController::Base
before_filter :set_product
private
def set_product
@product ||= Product.new
end
end
Run Code Online (Sandbox Code Playgroud)
产品_控制器:
def new
end
def create
@product = Product.new(params[:product])
if @product.category == "wheels"
redirect_to(new_services_path)
else
redirect_to(home_path)
end
end
Run Code Online (Sandbox Code Playgroud)
与此原始帖子相关的问题.. 通过多个部分传递变量(rails 4)
实例变量不会在重定向时传递。
@product
因此,当你到达时你没有对象before_filter
,所以你Product
每次只是创建新的空对象。
ActiveModel 对象无法在会话之间持续存在,但您可以将属性保留在会话存储中并在 before_filter 中使用它
def set_product
@product = Product.new(session[:product]) if session[:product]
@product ||= Product.new
end
Run Code Online (Sandbox Code Playgroud)
在您的创建方法中,您将表单参数移动到会话中......
def create
session[:product] = params[:product]
set_product
if @product.category == 'wheels'
---
Run Code Online (Sandbox Code Playgroud)
请注意,我们set_product
在 create 方法中显式调用,因为 session[:product] 已重新建立。
如果您想知道为什么实例变量丢失了......在 create 方法中,您位于 ProductController 的实例中,并且该实例有它自己的实例变量。当您重定向时,您正在指示 Rails 创建某个其他(或相同)控制器的新实例,并且该全新的控制器对象没有建立实例变量。
归档时间: |
|
查看次数: |
3125 次 |
最近记录: |