Как указать формат ответа на основе параметра формы в Rails 3.0.x - PullRequest
4 голосов
/ 02 марта 2011

Среда: Rails 3.0.4 и Ruby 1.9.2

У меня есть следующая форма:

<%= form_tag( {:action => 'show', :format => :pdf}, :method => :post) do %>

.. list of items ...

<%= submit_tag "Show", :onclick => "return checkAllFields(4);", :remote => true %> 

<select name="format">
    <option name="HTML">HTML</option>
    <option name="PDF">PDF</option>
</select>) 

<% end %>

Как видите, в URL я указал формат pdf. Что я хочу, так это запросить ответ контроллера в формате HTML или PDF на основе опции выбора. Оба запроса работают индивидуально, т. Е. Я могу отображать HTML или PDF, но не могу сделать его динамическим выбором пользователя. (Я даже не могу заставить его работать с двумя отдельными жестко закодированными кнопками)

Код контроллера, очевидно,

def show
  # code to locate items here

  respond_to do |format|
    format.html
    format.pdf { render :layout => false }
      prawnto :filename => "list.pdf", :prawn => { }
  end 
end

1 Ответ

7 голосов
/ 02 марта 2011

Я бы попробовал следующее:

Во-первых, вам может потребоваться удалить жестко закодированный :format => :pdf из тега формы (так как он может переопределить опцию ниже).

Далее,убедитесь, что тег select передает правильные значения.Можно использовать помощника:

select_tag :format, options_for_select([["HTML", "html"], ["PDF", "pdf"]], "html")

, который возвращает что-то вроде следующего HTML:

<select id='format' name='format'>
  <option value='html' selected='selected'>HTML</option>
  <option value='pdf'>PDF</option>
</select>
...