Ruby on Rails Иногда вложенный ресурс - PullRequest
0 голосов
/ 23 июля 2010

В приложении Ruby on Rails, над которым я работаю (2.3.8), у меня есть модель User, у которой могут быть тренировки

class Workout < ActiveRecord::Base
    belongs_to :user
end

У меня также есть отношения Тренер-> Клиент (все они привязаны к модели пользователя через таблицу соединений) Пользователь может добавлять тренировки для себя, НО тренер может также добавлять тренировки для своих клиентов.

Я настроил маршруты следующим образом:

map.resources :workouts
map.resources :clients, :has_many => 'workouts'

Оба набора маршрутов работают (т.е. / тренировки и / клиенты / 1 / тренировки). Я обновил workouts_controller, так что в зависимости от того, есть ли client_id, я покажу другой набор тренировок

def index
    if(params[:client_id])
        @workouts = Workout.find_all_by_user_id(params[:client_id])
    else
        @workouts = Workout.find_all_by_user_id(@current_user.id)
end

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

<% if (@client.nil?) %>
    <%= link_to 'New workout', new_workout_path %>
<% else %>
    <%= link_to 'New workout', new_client_workout_path(@client) %>
<% end %>

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

1 Ответ

1 голос
/ 23 июля 2010

Это похоже на хороший кандидат для создания link_to помощника для переноса в WorkoutHelpers, в который вы можете передать экземпляр @client. Если это nil, вы излучаете один тип ссылки, в противном случае - другой. Тогда вы можете избавиться от всех этих условий в представлении и сделать его более разборчивым.

Чтобы быть еще более общим и сухим, вы можете передать больше информации в помощник, чтобы помочь использовать правильный помощник пути, такой как new_workout_path или edit_workout_path и т. Д.

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

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