ruby-on-rails 将参数传递到视图中的嵌入操作时遇到问题

soat7uwm  于 2023-10-21  发布在  Ruby
关注(0)|答案(1)|浏览(132)

在处理一些遗留代码(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
5m1hhzi4

5m1hhzi41#

. params值被擦除,直到它们被再次设置,我猜这就是发生的事情,但是我如何再次设置它们,以便嵌入代码将拥有它?
是的,就是这样。params只有给定请求的生命周期。
我猜这里有一点,但我认为你需要这个作为你的路径调用:

formatted_report_reports_path(:startdate => params[:startdate], :format => :pdf)

相关问题