将实例变量从一个表单传递到另一个控制器在Rails中的操作

时间:2009-09-21 02:22:20

标签: ruby-on-rails forms

简单的问题 - 我有一个表单,我在其中创建一个对象的实例。在我创建该对象(也就是提交表单)之后,我想重定向到与不同控制器的操作相关联的新表单,并携带该实例变量来填充该表单的某些字段。

我知道我通常有2个选项,在会话中存储该实例变量或通过params传递它。我不能使用会话(出于各种原因,我不会厌烦你)。我很困惑的params选项。

我应该知道这一点。 :(你会怎么做呢?任何例子都非常感谢!!

贝齐

3 个答案:

答案 0 :(得分:1)

您的控制器上有两种方法。每个表单一个(由关联的模板呈现)。第一个表格应该发布到第二个动作。然后,第二个操作可以将请求参数传输到实例变量中,以便在第二个模板中可用。

class FooController
  def bar
   # setup instance variables and render first form
  end

  def baz
    @bar_values = params[:bar]
    # setup other instance variables and render second form
  end
end

UPDATE0 使用会话在两个控制器上进行。

class FooController
  def new_baz
    # setup instance variables and render the first form
  end

  def create_baz
    # respond to posting of form data
    session[:current_baz_values] = params
    redirect_to :action => "baq", :controller => "bar"
  end
end

class BarController
  def baq
    @baz_values = session[:current_baz_values]
    # setup other instance variables and render the second form
  end
end

答案 1 :(得分:0)

你能以某种方式在另一个控制器中找到新创建的记录,然后使用它来填充你需要的信息吗?

此外,除非您使用AJAX,否则您通常不希望在显示页面上对记录进行修改操作。这些属于编辑或更新页面。如果您总是希望人们能够在同一页面上编辑记录,我会在显示页面上使用一些AJAX,或者只是总是返回编辑/更新页面......

答案 2 :(得分:0)

如果您不想使用会话,可以使用flash变量来存储参数。有点像flash [:my_params] = params,然后在params = flash [:my_params]的下一个请求中读回来。关于flash的好处是,它只会持续下一个请求,并在此之后自动清除。

如果您在使用Ajax时正在寻找从客户端传递值,那么可能使用参数设置隐藏字段会将它们传递给下一个请求。