Ruby on Rails Рендеринг таблиц с динамическим содержимым и частями - PullRequest
3 голосов
/ 26 января 2011

Я пользовался этим сайтом много раз, чтобы найти свой ответ, но я, к сожалению, сейчас застрял и мне нужна помощь.На моей главной странице контента я работаю над тем, чтобы столкнуться с проблемой создания таблиц с использованием CSS и идентификаторов.

Обзор

Таблица разбита на 2 строки и 6 столбцов, а затем разбита на 12 блоков, каждый из которых 200px X 200px.Теперь содержимое каждого блока содержит новый элемент (@books), который генерируется из отдельного контроллера (используется встроенная команда generate scaffold).Я также использую нумерацию страниц, чтобы ограничить элементы на странице (12), поэтому старые элементы просто возвращаются назад.

Проблема

Я могу заполнить каждое из 12 полей новым содержимым, используя следующий код на моем контроллере, и просмотреть

controller

def content
@books= Book.paginate(:page => params[:page], :per_page => 12)
respond_to do |format|
  format.html # content.html.erb
end

view {content.html.erb}

<% @books.each do |book| %>
  <div id="column1">
      <tr>
        <td><%= book.name %></td>
        <td><%= book.title %></td>
        <td><%= book.content %></td>
        <td><%= link_to 'Show', book %></td>
     </tr>
  </div>
    <% end %>
<br />
<div id="paginate">
    <%= will_paginate(@books, 
) %)
</div>
</div>

Что происходит, когда я генерирую представление, так это то, что все отрисовывается идеально, но все мои книги используют один и тот же «столбец 1»

     <div id="column1">
      <tr>
        <td>Title</td>
        <td>Name</td>
        <td>Content</td>

        <td><a href="/books/4d376fc63060da4abc000002">Show</a></td>
     </tr>
  </div>
  <div id="column1">
      <tr>
        <td>Title </td>
        <td>Name</td>
        <td>Content</td>

        <td><a href="/books/4d3c96383060da31c9000001">Show</a></td>
     </tr>
  </div>

Я бы хотел, чтобы у каждой книги был свой собственный столбец {2, 3,4, ... 12}, чтобы я мог ориентироваться на каждую по отдельности, если мне нужно использовать jquery.Другая проблема заключается в том, что я хотел бы использовать частичную визуализацию для всего, но когда я использую частичную визуализацию, он помещает все элементы в 1 столбец {relisting of Book.all}, поэтому он просто повторяет всю содержащуюся информацию.У меня есть ощущение, что я предполагаю использовать другой метод или отредактировать текущий, чтобы завершить это, но я не уверен, что получилось.Спасибо!

greenz

Обновление

Привет, Майк, я действительно ценю твои усилия, пытаясь объяснить новичку, что происходит.Я в основном вернулся к первому шагу, применив каждый фрагмент кода, чтобы увидеть, куда он движется.Вы проделываете замечательную работу, объясняя проблему, но я не могу понять, что происходит при рендеринге кода, потому что документы ruby ​​для рендеринга и макета довольно просты, и у меня нет примеров, где я могу увидеть, как тег div_for влияет на процесс рендеринга (Я визуальный человек).Я хотел показать вам новый код, но комментарии не позволяют его, поэтому я открыл ответ: (

Первым редактированием было удаление

<% @books.each do |book| %> 

и замена на

<table> 
   render @books
</table>

так что теперь мой код выглядит следующим образом {content.html.erb}

<div id="maincontent">

    <table>
    render @books
    </table>
    <div id ="column1">
        <tr>
            <td><%= book.name %></td>
            <td><%= book.title %></td>
            <td><%= book.content %></td>
            <td><%= link_to 'Show', book %></td>
        </tr>

    </div>  
    <% end %>
    <br />

    <div id="paginate">

    <%= will_paginate(@books, 
    ) %>
    </div>
</div>

Когда это применяется, я получаю неожиданную ошибку завершения при рендеринге представления, указывающего на последнюю строку моего кода. (При добавлении конечного тега в конец он просто выдавал еще одну ошибку). Затем я изменил страницу рендеринга с _bookcontent.html.erb на _book.erb и вставил частичное между столбцом column1, как показано.

    <div id ="column1">

        <%= render :partial => "book" %>

    </div>  

<% end%>

Я понимаю, что этот тег сейчас делает, говоря моему частичному, что для каждой "книги" визуализируют последний идентификатор книги из базы данных. Так что теперь оператор render @books сохраняетотслеживание идентификатора книги для каждой страницы рендеринга, которую я вставляю (я могу ошибаться, но это то, как я это воспринимаю). Итак, теперь на печально известный _book.erb, который эта страница отображает здесь, находится мой код.

<% div_for(book) do %>
<tr>
    <td><%= book.name %></td>
    <td><%= book.title %></td>
    <td><%= book.content %></td>
    <td><%= link_to 'Show', book %></td>
</tr>
<% end %>

ФроМое чтение в <% div_for (book) do%> заключает в себе уникальный идентификатор div вокруг каждой книги, такой как

 <div id="book_123"> Book.name / Book.Title </div>

. Этот div теперь содержится внутри моего идентификатора div column1, до которого есть все моистиль для моей колонки / коробки.Из-за отсутствия информации о теге div_for я все еще сталкиваюсь с ошибками и неожиданными концами в моем коде.(Попытка отладки _book.erb с помощью ruby ​​-w не работает, поэтому я не знаю, как использовать конечные теги).Это то, что я пытаюсь исправить для моего здравомыслия.

  1. Должен ли я удалить <div id="column1"> со своей страницы контента и применить новый идентификатор / класс div в другом месте на моей странице контента?

  2. Гдевставить теги <% end%> один в частичное и в мой content.html.erb перед моим разбиением на страницы?Кажется, что когда у меня есть оба, рендерер жалуется на неожиданные концы в конце каждой страницы.

  3. При замене вашего кода вместо мин я получаю неожиданный конец, но это не из-за того, что вы определенно пропустили компонент в моем коде.

  4. Во-первых, я мог бы подойти к этому неверно с точки зрения восприятия макета, но моя главная цель - получить 2 строки по 6 блоков / столбцов с каждым блоком, содержащим отдельную книгу,Затем с помощью нумерации страниц перейдите к предыдущим книгам и примените тот же макет, что и сейчас, но я использую один и тот же идентификатор столбца для каждой книги, и мне нужно настроить таргетинг на все поля отдельно.

Ответы [ 3 ]

3 голосов
/ 26 января 2011

Если я вас правильно понимаю, это просто случай, когда вы делаете то, что вы сказали, а не то, что вы имели в виду.

Какой бы метод управления контентом ни имел контроллер, он должен выглядеть следующим образом:

def content
  @books = Book.paginate :page => params[:page], :per_page => 50
end

Ваше представление должно выглядеть следующим образом (старый синтаксис, но все равно должен работать нормально).

content.html.erb:

<div id="maincontent">
  <table>
    <%= render :partial => 'book', :collection => @books %>
  </table>
  <br />
  <%= will_paginate @books %>
</div>

Или попробуйте новый синтаксис.Новый синтаксис странный, и я не пробовал это лично, но я думаю, что это должно работать.Итак, вот альтернативная, более Rails 3 версия content.html.erb:

<div id="maincontent">
  <table>
    <%= render @books %>
  </table>
  <br />
  <%= will_paginate @books %>
</div>

Я думаю, что она выбирает частичное на основе имени класса и того, является ли оно перечислимым.

Часть _book.html.erb:

<%= div_for(book) do %>
<tr>
    <td><%= book.name %></td>
    <td><%= book.title %></td>
    <td><%= book.content %></td>
    <td><%= link_to 'Show', video %></td>
 </tr>
<% end %>

Div_for - это секретный соус.

Единственный конец, который требуется, - это конец внутри частичного, чтобы закрытьблок открывается, когда мы вызываем do после div_for.

0 голосов
/ 02 февраля 2012

Если я правильно понимаю, ваш код работает нормально, но вы хотите иметь:

column1
column2
column3
...

за каждую книгу. Если это так, почему бы вам просто не заменить:

 <div id="column1">

с

 <div id="column#{@book.id}">

или используйте счетчик

<%
 book_counter=0
 @books.each do |book| 
 book_counter = book_counter+1
%>
  <div id="column#{book_counter.to_s}">
0 голосов
/ 26 января 2011
Now i am getting unexpected end errors when i render the page here is my view

view = content.html.erb

    <div id="maincontent">

    render @books
      <div id="column1">
        <tr>
            <%= render :partial => "bookcontent" %>
        </tr>
      </div>
        <% end %>
    <br />
      <div id="paginate">
        <%= will_paginate(@books, 
        ) %>
      </div>
    </div>

Here is my render partial = _bookcontent.html.erb
   <% div_for(book) %>
<tr>
    <h3><%= book.name %></h3>
    <h3><%= book.title %></h3>
    <h3><%= book.content %></h3>
    <h3><%= link_to 'Show', book %></h3>
</tr>
<% end %>

Я также не знаю, должен ли я использовать div id или класс. По умолчанию я всегда использую только идентификатор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...