这是我正在尝试做的简化版本:
- 在执行任何其他操作之前,向用户提供一个表单以检索字符串。
- 输入字符串,然后重定向到默认的控制器动作(例如索引)。字符串只需要存在,不需要其他验证。
- 该字符串必须可用于此控制器中的所有操作(作为实例变量?)。
我对 Rails 很陌生,但这似乎不应该非常难,所以我觉得有点愚蠢。
我试过的:我有一个before_filter
重定向到一个看起来像的私有方法
def check_string
if @string
return true
else
get_string
end
end
该get_string
方法看起来像
def get_string
if params[:string]
respond_to do |format|
format.html {redirect_to(accounts_url)} # authenticate.html.erb
end
end
respond_to do |format|
format.html {render :action =>"get_string"} # get_string.html.erb
end
end
这失败了,因为我在同一个操作中有两个渲染或重定向调用。当然,我可以先把它拿出来respond_to
,但结果是控制器被困在了get_string
方法中。我或多或少可以看出为什么会这样,但我不知道如何解决它并爆发。我需要能够显示一个表单(视图),获取然后对输入字符串执行某些操作,然后正常进行。
该get_string.html.erb
文件看起来像
<h1>Enter a string</h1>
<% form_tag('/accounts/get_string') do %>
<%= password_field_tag(:string, params[:string])%>
<%= submit_tag('Ok')%>
<% end %>
我会感谢任何帮助!
编辑
感谢您的回复......
@Laurie Young:你是对的,我误会了。出于某种原因,我认为用户调用的任何给定控制器的实例都会在他们的会话中持续存在,并且 Rails 的一些魔力在于跟踪与每个用户会话关联的对象。我可以看到为什么回想起来这并没有多大意义,以及为什么我尝试使用实例变量(我认为会持续存在)不起作用。也谢谢你:)