- Ваш макет логичен?
/coaches
имеет смысл в качестве места назначения для коучей, которые входят в систему. Если пользователи вашего приложения являются только коучами, то даже корень имеет смысл.Когда коуч входит в систему, он принимает какую-то форму coaches#show
, но это не значит, что вы делаете что-то не так, просто потому что URL-адрес похож на /profile
.Не все должны придерживаться полного REST.on на стороне URL.В реальном мире действие "1005" не всегда находится на его маленькой странной странице.Если имеет смысл вложить новую форму Play на страницу /coaches
, ваш URL не должен отражать ее.
Контроллеры управляют взаимодействием с ресурсом.Со страницы /coaches
вы все равно будете отправлять запросы на удаление воспроизведения на plays#destroy
и проверять новые пьесы через plays#create
, что может render 'coaches/index' when it fails.
У меня никогда не былоимел дело с AJAX в Rails.
Лучший способ гарантировать, что тренеры видят только свои собственные пьесы, - это охватить их через ассоциацию 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 .Даже если некоторые из них могут быть за пределами вашего непосредственного понимания, это ресурс, который вы всегда можете посетить.Я обращаюсь к слайдам, которые идут с ним все время, чтобы найти лучшие способы ведения дел.