在我的控制器中,我有两个操作:"Select_users"
和"Make_something"
。
在“Select_users”中,我得到一个带有用户列表的@var
(这个用户是通过在同一视图中使用表单的搜索生成的),我需要为每个用户插入... ... / p>
@var.each do |v|
Table.create(:atribute => v.name)
end
当我有我选择的用户列表时,我使用“提交”按钮将我发送到“Make_something”操作。
所以我想把@var变量“传递”到“Make_something”动作来进行创建,但我不能在“Make_something”中使用@var,因为它只能在“Select_users”中访问。
我读过有关过滤器的内容,但我认为他们无法帮助我解决这个问题。
谢谢!
答案 0 :(得分:2)
您可以使用 before_filter 。在任何动作定义之前添加以下代码,即在类定义之后。
before_filter :initialize_variable, :only => [:select_users, :make_something]
这将确保method
initialize_variable
called
whenever
中的任何其他methods
被调用,它将initialize
{ {1}}如下所示。然后你可以直接使用变量。
variable
<强> USAGES:强>
def initialize_variable
@required_var = // get the details
end
和
def select_users
@required_var.each //......
end
答案 1 :(得分:1)
如果您有多个方法共有的代码,请将其解压缩到另一种方法。
def select_users
@var = go_get_those_users
end
def make_something
go_get_those_users.each do |v| Table.create(:atribute => v.name) end
end
private
def go_get_those_users
# do whatever you need to populate your collection
return []
end
或者,您可以在发布到“make_something”的表单中传递所选用户的ID列表。或者,如果你真的想以某种方式坚持这个(我假设这是某种形式的“多步形式向导”),用户db,而不是会话 - 有一个“向导”模型保留在DB中。然后,每个步骤都会传递wizard_id,并将自己的值保存到向导中 - 这可以通过关系为您的选定用户提供正常的AR关联。
答案 2 :(得分:0)
如何保证一个动作将在另一个动作之前运行。
如果您希望该数据为特定用户保留,请将其保存在模型中。
可能有wizard
模型,其中包含user_id和各个步骤的字段。
如果您希望它仅在该会话中保留,则使用session[:something]