论坛首页 Ruby版 rails

redirect_to之后,之前的实例变量无法取得。

浏览 581 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2007-12-03
Rails的方法中不是每个方法都一定要返回一个View页面,有的方法就是为了得到一个实例变量然后就redirect_to之前的一个页面,可是问题是我不知道为什么这个没有View页面的方法生成实例变量后,执行redirect_to之后,这个实例变量就丢了,这个实例变量可能是一个表,太大,不可以放到session或者cookie中,怎么办?

比如说:

  def show_scenariogroup
session[:app_cgid]=params[:app_cgid]|| session[:app_cgid]
@temp="just a temp string..."
if session[:app_cgid]!=nil
@sgs=Category.find_by_id(session[:app_cgid]).scenariogroup
        end
        redirect_to :controller=>:category
  end

执行了redirect_to :controller=>:category之后,不但@sgs没有,连@temp也没有,没有的意思就是在redirect_to :controller=>:category之后的页面中无法得到这两个实例变量。

谢谢!
   
最后更新时间:2007-12-03
redirect_to 返回一个304状态码,浏览器会自动进行下一次请求,当然和这次的请求没关系了。
   
0 请登录后投票
最后更新时间:2007-12-03
花花公子 写道
redirect_to 返回一个304状态码,浏览器会自动进行下一次请求,当然和这次的请求没关系了。
花花公子,你好!

Web开发敏捷之道第二版中,第118页总StoreController控制器的add_to_cart方法就是一个没有返回页面并且提供生成两个实例变量的方法,该方法最后一句代码就是redirect_to :index,按照书上说的应该就是跳转之后index页面再引用add_to_cart生成的实例变量,可是我试验了一下正如我上面所说,不行,请问能找到是什么原因么?
   
0 请登录后投票
最后更新时间:2007-12-03
i_sea 写道
花花公子 写道
redirect_to 返回一个304状态码,浏览器会自动进行下一次请求,当然和这次的请求没关系了。
花花公子,你好!

Web开发敏捷之道第二版中,第118页总StoreController控制器的add_to_cart方法就是一个没有返回页面并且提供生成两个实例变量的方法,该方法最后一句代码就是redirect_to :index,按照书上说的应该就是跳转之后index页面再引用add_to_cart生成的实例变量,可是我试验了一下正如我上面所说,不行,请问能找到是什么原因么?


def add_to_cart
  begin
    product = Product.find(params[:id])
  rescue ActiveRecord::RecordNotFound
    logger.error("Attempt to access invalid product #{params[:id]}" )
    redirect_to_index("Invalid product" )
  else
    @cart = find_cart
    @cart.add_product(product)
  end
end

这段ruby代码不理解请先弄明白 begin .. rescue .. else .. end 是起什么作用的。
   
0 请登录后投票
最后更新时间:2007-12-03
花花公子 写道
i_sea 写道
花花公子 写道
redirect_to 返回一个304状态码,浏览器会自动进行下一次请求,当然和这次的请求没关系了。
花花公子,你好!

Web开发敏捷之道第二版中,第118页总StoreController控制器的add_to_cart方法就是一个没有返回页面并且提供生成两个实例变量的方法,该方法最后一句代码就是redirect_to :index,按照书上说的应该就是跳转之后index页面再引用add_to_cart生成的实例变量,可是我试验了一下正如我上面所说,不行,请问能找到是什么原因么?


def add_to_cart
  begin
    product = Product.find(params[:id])
  rescue ActiveRecord::RecordNotFound
    logger.error("Attempt to access invalid product #{params[:id]}" )
    redirect_to_index("Invalid product" )
  else
    @cart = find_cart
    @cart.add_product(product)
  end
end

这段ruby代码不理解请先弄明白 begin .. rescue .. else .. end 是起什么作用的。
花花公子你好!
谢谢你的帮助。
你上面这段敏捷开发中的代码不是我说的那段代码,
下面这段才是:
def add_to_cart  
  begin 
    product = Product.find(params[:id])  
  rescue ActiveRecord::RecordNotFound  
    logger.error("Attempt to access invalid product #{params[:id]}" )  
    redirect_to_index("Invalid product" )  
  else 
    @cart = find_cart  
    @cart.add_product(product)
    redirecto_to_index#就多了这个跳转,不明白的就是这里,这个#方法执行完毕之后跳转到index后,还能找到@cart这个实例变量么?  
  end 
end
帮忙看下,谢谢!
   
0 请登录后投票
最后更新时间:2007-12-03
哥们
before_filter :find_cart, :except => :empty_cart
这个一定忘记了吧.
   
0 请登录后投票
最后更新时间:2007-12-04
dlxiao 写道
哥们
before_filter :find_cart, :except => :empty_cart
这个一定忘记了吧.
dlxiao你好! 不明白你说的什么意思,页面间传递实例变量和前置过滤器有什么关系啊?
   
0 请登录后投票
最后更新时间:2007-12-04
before_filter :find_cart

find_cart在每次处理前初始化@cart

而find_cart从session中取出数据组装cart


不存在什么传递实例变量(实际数据是在session中)

LZ要好好看一下agile rails了
   
0 请登录后投票
论坛首页 Ruby版 rails

跳转论坛:
JavaEye推荐