将参数传递给视图中的嵌入操作时遇到问题

问题描述 投票:0回答:1

在处理一些遗留代码(Rails v2.3)时,我陷入了困境。

我有一个视图,它使用嵌入标签来运行生成 PDF 的操作。 从项目中的其他工作视图复制代码,我有指向控制器操作的嵌入代码链接:

<embed height="400px" width="95%" name="plugin" src="<%= formatted_report_reports_path(:pdf) %>" type="application/pdf" />

src 链接到名为

report
的操作,该操作需要视图上名为
params[:startdate]
params[:enddate]
的某些参数的值,但一旦嵌入代码运行,这些参数就会在
nil
操作中变成
def report

我向自己证明,

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[:]
在整个程序中保持它们的值,并且我很难理解为什么一旦嵌入代码运行该操作它们就为零。我遇到的其他一些线程提到,一旦在
:action
中调用另一个
:controller
,参数值就会被擦除,直到再次设置它们,我猜这就是发生的情况,但是我如何再次设置它们以便嵌入代码会有吗?

我正在看的代码:

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
ruby-on-rails ruby-on-rails-2
1个回答
0
投票

...参数值会被擦除,直到再次设置它们,我猜这就是发生的情况,但是我如何再次设置它们以便嵌入代码能够拥有它?

是的,确实是这样。

params
仅具有给定请求的生命周期。

我在这里猜测了一点,但我认为你需要这个来进行路径调用:

formatted_report_reports_path(:startdate => params[:startdate], :format ⇒ :pdf)
© www.soinside.com 2019 - 2024. All rights reserved.