2015-07-21 3 views
0

Я новичок в RoR, и я немного смущен Rails MWC. Я чувствую, что что-то понимаю.Ruby on Rails макеты и рендеринг

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

Итак, что я пытаюсь сделать, я набираю 2 изделия и изделия из мешков и 1 контроллер для домашней страницы. Я подключаюсь к главному контроллеру. Затем в шаблоне домашней страницы я пытаюсь отобразить продукты и шаблон статьи. Я получаю сообщение об ошибке, что методы, которые используются в контроллерах продуктов и статей, не определены.

Я не понимаю, где проблема. Является ли этот вид шаблона одним шаблоном внутри другого, не является соглашением Rails. Или у меня есть ошибки в моем коде.

+0

Если шаблон использует данные, скажем, '@ articles', он должен быть инициализирован в контроллере. В вашем случае он выглядит как 'HomeController'. Два других контроллера не выполняются и, следовательно, не влияют на шаблоны. –

ответ

1

Я не вижу ваш код, но в этом случае я уверен, что у вас есть ошибки.

приложение/контроллеры/home_controller.rb

class HomeController < ApplicationController 

    def index 
    @products = Product.top5 # Your logic to fetch top 5 
    @articles = Article.top5 
    end 

end 

приложение/просмотров/Главная/index.html.erb

<% @products.each do |product| %> 
    <%= product.name %> 
<% end %> 
<% @articles.each do |article| %> 
    <%= article.name %> 
<% end %> 

Это прекрасно, я сделал это много раз. Считайте, что в Rails у вас нет никакой связи между контроллером и моделями, есть соглашение, но контроллер Rails вообще не привязан к какой-либо модели.

1

Во-первых, вам необходимо создать экземпляр переменных @products и @articles (это пример) по вашему методу контроллера. Затем вы можете отобразить представление.

Обратите внимание на добавление @. В представлении рендеринга будут доступны только переменные с @.

По умолчанию, когда вы вызываете GET для /products, вы прибудете по методу index. В конце этого метода, если не указано ни одного вида, Rails будет отображать views/products/index. В этом представлении вы получите доступ ко всем переменным с помощью @ и сделаете все, что хотите.

1

Во-первых, да, шаблон, создающий шаблон другого контроллера (а не частичный) не в рамках правил Rails. Экраны - это «одноресурсный» контроллер: он принимает определение вашей модели и генерирует базовый контроллер для редактирования и отображения этой конкретной модели (т. Е. Product). Что вам действительно нужно сделать, это использовать две модели вы сгенерированных в контроллере домашней страницы, своего рода, как это:

class HomePageController < ApplicationController 
    def index 
    @articles = Article.top_5 
    @products = Product.top_5 
    # Render the @articles and @products in the view. 
    end 
end 
Смежные вопросы