Rails 3 - вопросы по макету приложения - PullRequest
1 голос
/ 09 мая 2011

Я испытываю некоторые трудности, пытаясь разобраться с общим макетом приложения Rails.

По сути, я делаю веб-приложение для игр в футбол.Вход для тренеров и переход на страницу / coach / index.На этой странице они могут нарисовать свою игру и тому подобное, используя интерфейс JavaScript.Моя проблема в том, чтобы сохранить игру, мне нужно отправить этот JSON на сервер, чтобы зарегистрировать его в нужной записи базы данных Play.

  1. Правильно ли мое расположение, логически?Например, должен ли входящий в систему тренер привести его на эту страницу, а затем он рисует там пьесы и сохраняет их, создает новые, загружает их и т. Д., Или я должен делать это на страницах, управляемых контроллером Play?

  2. Я хочу сохранить JSON, сгенерированный движком рисования, в базу данных.Каков наилучший способ сделать это?Все учебники по Rails AJAX, которые я вижу, основаны на простых формах, в которых вы устанавливаете свойство remote => true для них и тому подобное.Как мне сделать AJAX POST / GET для БД Rails без явной формы и обработать ввод?

  3. Вероятно, это связано с моим отсутствием ноу-хау Rails (яя пытаюсь учиться по ходу дела), но что, по вашему более опытному мнению, является для меня лучшим способом обеспечить показ правильных игр тренеру, который их сделал?Я немного пытаюсь понять, как контроллеры получают доступ к вещам, контролируемым другими контроллерами.Я уверен, что должны быть некоторые соглашения для такого рода вещей.

Чем больше я думаю об этом, тем больше мне кажется, что вход в систему должен привести вас к / playsкаталог, и я должен изменить там создать и тому подобное, чтобы делать то, что я хочу сделать.Заранее спасибо.

1 Ответ

0 голосов
/ 12 мая 2011
  1. Ваш макет логичен?/coaches имеет смысл в качестве места назначения для коучей, которые входят в систему. Если пользователи вашего приложения являются только коучами, то даже корень имеет смысл.Когда коуч входит в систему, он принимает какую-то форму coaches#show, но это не значит, что вы делаете что-то не так, просто потому что URL-адрес похож на /profile.Не все должны придерживаться полного REST.on на стороне URL.В реальном мире действие "1005" не всегда находится на его маленькой странной странице.Если имеет смысл вложить новую форму Play на страницу /coaches, ваш URL не должен отражать ее.

Контроллеры управляют взаимодействием с ресурсом.Со страницы /coaches вы все равно будете отправлять запросы на удаление воспроизведения на plays#destroy и проверять новые пьесы через plays#create, что может render 'coaches/index' when it fails.

  1. У меня никогда не былоимел дело с AJAX в Rails.

  2. Лучший способ гарантировать, что тренеры видят только свои собственные пьесы, - это охватить их через ассоциацию Coach has_many :plays.В решениях аутентификации Rails (например, Devise) принято предусматривать метод current_user, который возвращает экземпляр модели User текущего пользователя, вошедшего в систему.

Your coaches#indexдействие может выглядеть так:

# Coaches controller
def index
  @plays = current_user.plays
end

Тогда ваше представление может иметь:

# views/coaches/index.erb
<ul>
<% for play in @plays %>
  <li><%= play.name %></li>
<% end %>
</ul>

Что бы вы не делали: @plays = Play.where(:user_id => @user.id).

Это также упрощает иобеспечивает другие действия.Подумайте:

@play = current_user.plays.new

@play = current_user.plays.build(:name => "My First Play")
redirect_to @play, :notice => "Success!" if @play.save

current_user.plays.find(params[:id]).destroy

Чтобы ответить на ваш вопрос, добавленный в качестве комментария:

# Coaches controller
def new
  @play = current_user.plays.new
end

def create
  @play = current_user.plays.build(params[:play]) # @play now already contains the association to the coach that created it.
  if @play.save!
    redirect_to # somewhere
  else
    render 'coaches/index'
  end
end
  • Я настоятельно рекомендую Railscasts , если вы не знакомы с ними,Даже просмотр эпизодов на темы, которые вы не собираетесь реализовывать в ближайшее время, даст вам хорошее представление.
  • Например, вот Railscast на Devise .Devise также имеет приличную документацию по Github .
  • Я недавно купил супруга CodeSchool на Rals Best Practices .Даже если некоторые из них могут быть за пределами вашего непосредственного понимания, это ресурс, который вы всегда можете посетить.Я обращаюсь к слайдам, которые идут с ним все время, чтобы найти лучшие способы ведения дел.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...