gpt4 book ai didi

ruby-on-rails - 未使用重定向设置实例变量

转载 作者:行者123 更新时间:2023-12-04 06:02:58 27 4
gpt4 key购买 nike

什么会导致我的实例变量 @product 无法为重定向设置/传递。 Product 是一个 ActiveModel 对象,而不是 ActiveRecord。更具体地说,@product 变量没有出现在 redirect_to(new_services_path) 或 redirect_to(home_path) 页面中。因为@product 变量需要在我的每页上的页脚中填充一个表单。

应用 Controller :

class ApplicationController < ActionController::Base 
before_filter :set_product

private

def set_product
@product ||= Product.new
end
end

产品_ Controller :
  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

与此原始帖子相关的问题..
Passing variables through multiple partials (rails 4)

最佳答案

实例变量不会在重定向时传递。

因此,您没有 @product您到达 before_filter 时的对象所以你只是在创建新的和空的 Product对象每次。

ActiveModel 对象不能在 session 之间保持不变,但您可以将属性保留在 session 存储中并在 before_filter 中使用它

def set_product
@product = Product.new(session[:product]) if session[:product]
@product ||= Product.new
end

在您的 create 方法中,您将表单参数移动到 session ...
def create
session[:product] = params[:product]
set_product
if @product.category == 'wheels'
---

请注意,我们调用了 set_product在 create 方法中明确显示,因为 session[:product] 已重新建立。

如果您想知道为什么实例变量会丢失……在 create 方法中,您位于 ProductController 的实例中,并且该实例具有它自己的实例变量。当您重定向时,您是在指示 rails 创建某个其他(或相同) Controller 的 NEW 实例,并且该全新的 Controller 对象没有建立实例变量。

关于ruby-on-rails - 未使用重定向设置实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35109160/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com