Создавая различные представления для страниц, я иду по этому пути, как правильно? - PullRequest
0 голосов
/ 10 декабря 2010

Rails нуб здесь ищет какой-то совет / направление по чему-то. У меня есть несколько «Страниц», и я хочу создать разные виды этих страниц. (например, просмотр списка (текстовый список), просмотр галереи (миниатюры) и т. д.)

Но то, как я это делаю, не кажется СУХИМЫМ, но я новичок в Rails, поэтому не знаю.

Вот мои настройки. rout.rb У меня есть:

resources :pages do
    collection do
         get :gallery
    end
    collection do
        get :list
    end     
end

В моем pages_controller.rb

def gallery
  @pages = Page.find(:all, :order => "created_at")
end

def list
  @pages = Page.find(:all, :order => "created_at")
end 

Так что это уже кажется странным, потому что я дублирую код между списком и галереей.

В views / pages / gallery.html.erb

<% for page in @pages %>
    <div style="width:200px;height:200px;border:1px solid #DDD;float:left;margin:10px;">     
        <%= link_to page.name, page %>
    </div>
<% end %> 

В views / pages / list.html.erb

<% for page in @pages %>
    <div style="width:90%;border-bottom:1px solid #DDD;margin:10px;">
        <h3><%= link_to page.name, page %></h3>
    </div>
<% end %>

Все работает правильно. Я вижу представление списка, когда я иду на http://localhost:3000/pages/list, и представление галереи на http://localhost:3000/pages/gallery. Но есть ли лучший способ?

Ответы [ 2 ]

3 голосов
/ 10 декабря 2010

Во-первых, вы можете немного изменить код маршрута. Не обязательно указывать коллекцию дважды:

resources :pages do
  collection do
    get :gallery
    get :list
  end     
end

И чтобы избежать повторения вашего кода в контроллере, вы можете разделить код Page.find на новый метод, который вызывается из before_filter, что-то вроде этого:

class PagesController < ApplicationController
  before_filter :find_pages, :only => [:gallery, :list]

  def gallery
  end

  def list
  end

private
  def find_pages
    @pages = Page.find(:all, :order => "created_at")
  end

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

2 голосов
/ 10 декабря 2010

Для дублирования данных в файле представления вы также можете создать частичный файл и отобразить этот частичный файл на обеих страницах просмотра.

Это можно сделать следующим образом.

Создайте частичный файл, предположим, _page.html.erb

<% for page in @pages %>
    <div style="width:200px;height:200px;border:1px solid #DDD;float:left;margin:10px;">     
        <%= link_to page.name, page %>
    </div>
<% end %> 

, и затем вы можете отобразить этот файл на странице просмотра

в views / pages / gallery.html.erb

`<%= render :partial => 'page'%>

в views / pages / list.html.erb

`<%= render :partial => 'page'%>

А для маршрутов и контроллера, я думаю, @DanneManne предложил правильный путь.

Надеюсь, что это можетрешить вашу проблему.

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