2015-09-06 3 views
-1

Я хочу показать данные из 4 моделей в один вид. Я создал отдельный контроллер для этого named posts_controller.rb, а в представлениях я создал папку сообщений и создал файл index.html.erb.Объединение нескольких моделей в один вид Rails

После этого в файле контроллеров я добавил следующий код.

class PostsController < ApplicationController 

    def index 
     @quotes = Quote.all.order("created_at DESC") 
     @images = Image.all.order("created_at DESC") 
     @jokes = Joke.all.order("created_at DESC") 

     @items = (@quotes.to_a + @jokes.to_a) 
    end 
end 

И вот файл представления, где я пытаюсь показать данные из двух элементов, как сейчас. Но это не работает. Pls проверит код.

<% if @items.any? %> 

    <div class="col-md-12"> 
    <% @items.each.do |item| %> 
     <% if item.is_a? Quote %> 

     <div class="postbg"> 

       <%= quote.quotefie %> 
       <div class="wedate pull-right wehi"> 
       <%= quote.created_at.strftime("%b %d, %Y") %> 
      </div> 
      <div class="clearfix"></div> 
       <em class="pull-right wehi" style="margin-top:20px;"> - <%= quote.author %></em> 
       <%= link_to 'Show', quote %> 
       <%= link_to 'Edit', edit_quote_path(quote) %> 
       <%= link_to 'Destroy', quote, method: :delete, data: { confirm: 'Are you sure?' } %> 
     </div> 
    <% else %> 

     <% @jokes.each do |joke| %> 

     <div class="postbg"> 

       <%= joke.jokefie %> 
       <div class="wedate pull-right wehi"> 
       <%= joke.created_at.strftime("%b %d, %Y") %> 
      </div> 
      <div class="clearfix"></div> 
       <%= link_to 'Show', joke %> 
       <%= link_to 'Edit', edit_joke_path(joke) %> 
       <%= link_to 'Destroy', joke, method: :delete, data: { confirm: 'Are you sure?' } %> 
     </div> 

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

<% end %> 

Произошла ошибка.

undefined method `do' for #<Enumerator:0x007fd55fb032b8> 
+0

Что ваш вопрос? – Pavan

+0

Что не работает? – Pavan

+0

Вышеприведенный код не работает. Я не могу показать 4 модели данных в одном представлении. – Sumeet

ответ

0

Ваша проблема в этой линии здесь:

<% @items.each.do |item| %> 

do определяет блок, а не метод вызова, поэтому он должен быть:

<% @items.each do |item| %> 

Примечание снятую ..

Вы использовали do правильно дальше вниз, когда используете @jokes.each do |joke|.

0

Эта линия

<% @items.each.do |item| %> 

должен быть

<% @items.each do |item| %> 
+0

@sevenseacat Теперь получение этой ошибки неожиданный конец ввода, ожидающий keyword_end – Sumeet

+0

@Sumeet Вам нужно добавить '<% end %>' для 'do' перед' <% else %> ' – Pavan

+0

Nope. его показ неожиданных ключевых слов заканчивается здесь. – Sumeet

Смежные вопросы