我无法访问@quiz
方法中的new
实例变量。
我需要在与@quiz
方法相对应的视图中访问new
。
@edit我试图通过@quiz
再次以新方法绕过此问题,但由于某种原因,params[:session][:test_password]
为空。
class QuizzesController < ApplicationController
include UsersHelper
before_action :logged_in_user
def password_check
end
def forward
find_quiz
if @quiz
redirect_to new_quiz_path
else
redirect_to root_url
flash[:danger] = t(:invalid_test_password)
end
end
def new
@score = Score.new
end
private
def find_quiz
@quiz = Test.find_by(password: params[:session][:test_password])
end
end
此控制器中的路由:
quiz_password GET (/:locale)/quiz_password(.:format) quizzes#password_check {:locale=>/pl|en/}
POST (/:locale)/quiz_password(.:format) quizzes#forward {:locale=>/pl|en/}
quiz GET (/:locale)/quiz(.:format) quizzes#new {:locale=>/pl|en/}
答案 0 :(得分:2)
请记住,每个请求都由一个独立的ActionController实例处理,因此在一个请求上设置的任何实例变量将在第二个请求到达时被删除。您只能在session
,文件系统或某种数据库等内容中保留数据。
这里你应该做的是更好地利用你已有的方法:
before_action :find_quiz, only: [ :forward, :new ]
然后不需要手动触发该方法,它将在每个自动指向该操作的请求之前发生。当该方法运行时,该变量将填充。
答案 1 :(得分:0)
如果您重定向用户,则会发出新请求。因为所有变量都被删除了,你需要再次创建它们。
答案 2 :(得分:0)
我错误地认为session[:test_password] = params[:session][:test_password]
是将变量保存到会话中的正确方法。我已经分配了class QuizzesController < ApplicationController
include UsersHelper
before_action :logged_in_user
def password_check
end
def forward
@quiz = Test.find_by(password: params[:session][:test_password])
if @quiz
store_password
redirect_to quiz_path
else
redirect_to root_url
flash[:danger] = t(:invalid_test_password)
end
end
def new
find_quiz
@score = Score.new
end
private
def store_password
session[:test_password] = params[:session][:test_password]
end
def find_quiz
@quiz = Test.find_by(password: session[:test_password])
end
end
而且工作得很好
<fetch mapping="logical" distinct="true">
<entity name="entity">
<attribute name="new_classopportunityid" />
<attribute name="new_trainingproduct" />
<attribute name="new_gtgstatus" />
<attribute name="new_scheduledstartdate" />
<attribute name="new_scheduledenddate" />
<attribute name="new_remainingnumberofseats" />
<attribute name="new_liveclassroom" />
<attribute name="new_maxlive" />
<attribute name="new_xavieruniversity" />
<attribute name="new_partnerlive" />
<attribute name="new_blended" />
<filter>
<condition attribute="new_classopportunityid" operator="in">
<value>001943ea-e263-e611-8158-00155d002810</value>
<value>0071e4ea-bd9b-e611-8163-00155d002810</value>
<value>00c32774-1c8f-e611-8161-00155d002810</value>
<value>00d513fa-f0bb-e611-8169-00155d002810</value>
<value>....</value>
<value>....</value>
<value>....</value>
</condition>
</filter>
</entity>
</fetch>