2011-01-01 3 views
0

Я создал проект Что делает следующий код?

demo
в рельсах. я тогда создал scaffolded приложение, давая
 rail_apps/demo> script server products title :stiring,description :text,url: string

Тогда я дал

http://localhost:3000/products/

products_controller.rb содержит следующий фрагмент кода

class ProductsController < ApplicationController 
    # GET /products 
    # GET /products.xml 
    def index 
    @products = Product.find(:all) 

respond_to do |format| 
    format.html # index.html.erb 
    format.xml { render :xml => @products } 
end 
    end 
end 

, но я действительно не могу понять эти четыре строки кода. может ли кто-нибудь дать мне преимущество?

ответ

5
@products = Product.find(:all) 

извлекает все продукты из базы данных.

respond_to do |format| 
    format.html # index.html.erb 
    format.xml { render :xml => @products } 
end 

- общий шаблон в RoR. На основании запроса контроллер отображает другое представление. Например, если вы запросите /products, он передаст продукты на вид index.html.erb, который является только шаблоном html. Если запрос /products.xml, он будет сериализовать продукты в XML-файл и отправить этот файл в качестве ответа.

+0

thank u Дарин, может также сказать мне, что response_to - это цикл или нет? Кажется, это петля. В этом случае клиент будет запрашивать один раз. Какова реальная цель цикла do здесь? – CHID

+0

@CHID, это не цикл, это блок. Вы можете взглянуть на [следующий пост в блоге] (http://www.tokumine.com/2009/09/13/how-does-respond_to-work-in-the-rails-controllers/) для более подробного объяснения , –

+0

поблагодарить u еще раз Дарин – CHID

0

Оказать index действие сначала найти все продукты и присвоить их переменной @products, а затем реагировать либо HTML или XML, в зависимости от того, что хочет клиент (например, если URL заканчивается .xml клиент хочет XML.

Рендер index.html.erb, если клиент хочет HTML (Rails находит шаблон сам, основываясь на имени контроллера и имени действия, так ProductsController и index делает Rails ищет app/views/products/index.html.erb.

Рендер XML из переменной @products, если клиент хочет XML (Rails может автоматически сериализовать объект ActiveRecord или массив объектов, как XML, просматривая его свойства).

+0

response_to do | формат | . . end Кажется, это структура типа петли .. это действительно петля? – CHID

+0

Нет, это больше похоже на предложение соответствия шаблону. Подумайте о случае/когда (switch/case в Java/JS/C++). – Theo

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