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

推荐答案

...参数值将被擦除,直到重新设置它们,我猜这就是正在发生的事情,但是我如何再次设置它们,以便嵌入代码将具有它们?

是的,情况就是这样.这params个请求的生命周期仅为给定请求的生命周期.

我猜这里有一点,但我认为你需要这个作为你的PATH呼叫:

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

Ruby-on-rails相关问答推荐

如何在rails 7中禁用Simple_Form验证

在PDF生成中渲染 colored颜色

DateTime的最小数据提交格式

在Rails中,如何将帮助器方法添加到属性/列?

包含字母和数字组合的正则表达式

我的 Ruby on Rails Web API 的 Docker 映像未在服务器上构建,因为它未与 ruby​​gems.org 连接

Ruby on Rails 让外键工作

如何保持 en.yml DRY?

如何使用 Rails 3 / Rack 在没有 www 的情况下重定向?

rails:防止闪烁消息显示两次

Ruby on Rails 中的消息队列

如何在 rspec 中运行单个测试?

在 PostgreSQL 中强制字符串的最大长度

导轨链接到:远程

在rails中带有内部文本或html的link_to image_tag

Rails:一次添加多个 flash[:notice] 的简单方法

如何从 rails 控制器操作发出 404 响应?

您如何访问设计控制器?

如何在两个字段上对 ruby​​/rails 进行排序?

如何在 Rails 4 中测试控制器关注点