在处理一些遗留代码(RailsV2.3)时,我陷入了困境.
我有一个使用Emed标记来运行生成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
符号是用来确定"格式"的,就像我的默认连接路由中一样.我try 添加另一个连接,以使用:startdate
符号和格式符号,但同样不起作用:
map.connect ':controller/:action/:startdate.:format'
个
我的理解是,params[:]
人在整个程序中保持他们的值,我遇到了障碍,我不明白为什么一旦嵌入代码运行操作,他们就是零.我遇到的其他一些线程提到,一旦在: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_Controler.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