在处理一些遗留代码(Rails v2.3)时,我被卡住了。
我有一个视图,它使用embed标记来运行一个生成PDF的操作。从我的项目中的其他工作视图中删除代码,我将嵌入代码链接到控制器操作:<embed height="400px" width="95%" name="plugin" src="<%= formatted_report_reports_path(:pdf) %>" type="application/pdf" />
src链接到一个名为report
的操作,该操作需要名为params[:startdate]
和params[:enddate]
的视图上的一些参数的值,但是一旦嵌入代码运行,这些参数就变成了def report
操作中的nil
。
我向自己证明了embed
标签是通过将一些日期值硬编码到def report
操作中来工作的,所以至少我知道当它确实有日期时它是工作的。
我想我可以像这样将params[:]
传递给src:src="<%= formatted_report_reports_path(params[:startdate], :pdf) %>"
但它会返回这样的错误:undefined method 'has_key?' for :pdf:Symbol
在我的研究中,我发现:pdf
符号是用来确定“格式”的,就像我的默认连接路由一样。我尝试添加另一个连接来使用:startdate
符号沿着格式符号,但也不起作用:map.connect ':controller/:action/:startdate.:format'
我的理解是params[:]
在整个程序中保持它们的值,我一直在理解为什么一旦嵌入代码运行操作,它们就为nil。我遇到的其他一些线程提到,一旦在:controller
中调用另一个:action
,参数值就会被擦除,直到它们再次被设置,我猜这就是发生的事情,但是我如何再次设置它们,以便嵌入代码将其包含?
我看到的代码:
report.html.erb
<%- form_tag report_reports_url, :method => 'get' do -%>
<p>
<%= label_tag :startdate, 'Start Date Range' %>
<%= calendar_date_select_tag :startdate, params[:startdate] %>
to
<%= calendar_date_select_tag :enddate, params[:enddate] %>
</p>
<%= submit_tag 'Run Report' %>
<%- end -%>
</p>
</div>
<p></p>
<%- if params[:startdate].nil? -%>
<%- else -%>
<div id = 'results'>
<embed height="400px" width="95%" name="plugin" src="<%= formatted_report_reports_path(:pdf) %>" type="application/pdf" />
</div>
<%- end -%>
reports_controller.rb
def report
respond_to do |format|
format.html do
end
format.pdf do
pdf = make_report_pdf(params[:startdate],params[:enddate])
if pdf.nil?
else
send_file pdf, :type=> "application/pdf", :disposition => "inline"
end
end
end
end
1条答案
按热度按时间5m1hhzi41#
. params值被擦除,直到它们被再次设置,我猜这就是发生的事情,但是我如何再次设置它们,以便嵌入代码将拥有它?
是的,就是这样。
params
只有给定请求的生命周期。我猜这里有一点,但我认为你需要这个作为你的路径调用: