Как структурировать rails 3 контроллеры и представления для приложений на основе ajax - PullRequest
1 голос
/ 06 марта 2012

Мне было интересно, каковы лучшие практики для структурирования контроллеров и представлений для приложений rails на основе ajax.

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

Технически вы должны иметь только глаголы в контроллере - то есть действия или слова.Это значит, что делать следующее было бы неправильно:

class PostsController < ApplicationController
    #...
    def body
        #return body of a particular post
    end
    #...
end

Поэтому моя другая идея - создать его как вложенный ресурс:

resources :posts do
    resource :body, :controller = "posts/body"
end

, а затем создать субконтроллер posts / body:

class Posts::BodyController < ApplicationController
    def show
        #return body of a particular post
    end
end

URL для этого будет:

/ posts /: post_id / body

Что для меня выглядит правильно.

Кто-нибудь ещеесть идеи получше?

Ответы [ 2 ]

0 голосов
/ 06 марта 2012

Зачем тебе просто тело? Почему бы вам не вернуть весь пост и просто использовать тело?

Если этого недостаточно, вы могли бы сделать что-то вроде этого

def show
  @post = Post.find(params[:id])

  # set some etag stuff up so we don't have to request this again if it hasn't changed 
  response.last_modified = @post.created_at.utc
  response.etag = @post

  return head :not_modified unless request.fresh?(response)
  respond_to do |wants|
    wants.js { render :json => @post.to_json(:only => params[:select]) }
  end
end

Есть несколько возможных проблем с этим кодом выше. Во-первых, я не могу вспомнить, если find() возвращает цепочечный запрос, во-вторых, в целях безопасности вам, вероятно, следует очистить fields, чтобы он возвращал только белый список полей (вы можете сделать это с помощью slice).

Надеюсь, это поможет!

0 голосов
/ 06 марта 2012

Хороший вопрос.У меня есть приложение, которое обслуживает запросы ajax, а также обычные запросы страниц, и я пошел с вашим первым подходом, добавив действие ajax в тело контроллера ресурсов.

Лично мне этот подход нравится больше, потому что он сохраняетконтроллеры управляемы.Со своей второй идеей создать его как вложенный ресурс, вы получите множество контроллеров, которые просто выполняют одно действие ajax.Я бы предпочел использовать решение с высокой связностью, в котором все о сообщениях выполняется в PostsController, а не создавать множество субконтроллеров с одним действием.

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