направляющие respond_to и различные формы ответов HTML

Я часто использую

respond_to do |format|
...
end

в направляющих для моих Успокоительных действий, но я не знаю то, что идеальное решение для обработки различных форм, скажем, ответов HTML. Например, view1, который называет действие, A мог бы ожидать назад HTML со списком виджетов, перенесенных в тег УЛ., в то время как view2 ожидает тот же список виджетов, перенесенных в таблицу. То, как каждый Успокоительно выражает тот мало того, что я хочу назад HTML, отформатировало ответ, но я хочу перенесенный в таблицу, или в УЛ., OL, опции или некоторый другой общий списковый тег HTML?

5
задан Luke W 12 May 2010 в 15:22
поделиться

3 ответа

Это основная идея:

Контроллер

class ProductsController < ApplicationController

  def index

    # this will be used in the view
    @mode = params[:mode] || 'list'

    # respond_to is used for responding to different formats
    respond_to do |format|
      format.html            # index.html.erb
      format.js              # index.js.erb
      format.xml do          # index.xml.erb
        # custom things can go in a block like this
      end
    end
  end

end

Представления

<!-- views/products/index.html.erb -->
<h1>Listing Products</h1>

<%= render params[:mode], :products => @products %>


<!-- views/products/_list.html.erb -->
<ul>
  <% for p in products %>
  <li><%= p.name %></li>
  <% end %>
</ul>


<!-- views/products/_table.html.erb -->
<table>
  <% for p in products %>
  <tr>
    <td><%= p.name %></td>
  </tr>
  <% end %>
</table>

Использование:

Вы можете ссылаться на другие "режимы" представления, используя:

<%= link_to "View as list",   products_path(:mode => "list") %>
<%= link_to "View as table",  products_path(:mode => "table") %> 

Примечание: Вы захотите сделать что-то, чтобы гарантировать, что пользователь не попытается указать недопустимый режим представления в URL.

3
ответ дан 15 December 2019 в 06:19
поделиться

Я думаю, что вы здесь ошиблись. Во-первых, представления не вызывают действий, все наоборот. Во-вторых, response_to используется для отображения совершенно другого формата (например, html, xml, js и т. Д.), А не другого шаблона.

0
ответ дан 15 December 2019 в 06:19
поделиться

Изучите этот вариант маршрута по умолчанию:

 map.connect ':controller/:action/:id.:format'

Обратите внимание, что он позволяет вам установить формат, передав его в качестве расширения. Например, у меня иногда есть приложения с несколькими потребителями, которым требуются разные форматы XML.

Так, например, когда-то приложение iphone использует формат 'xmlm' (для XML Mobile), а потребитель Java использует 'xml', потому что он работает с полной сериализацией. Это позволяет мне использовать этот индикатор как формат верхнего уровня.

respond_to do |format|
 format.xml{  render :xml => @people.to_xml  }
 format.xmlm { do other stuff }
end

Эта страница будет вам полезна и содержит всю информацию, необходимую для реализации этого материала (особенно обратите внимание на часть о пользовательских типах mime), обязательно ознакомьтесь с комментариями: http://apidock.com /rails/v2.3.4/ActionController/MimeResponds/InstanceMethods/respond_to

0
ответ дан 15 December 2019 в 06:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: