Я видел функцию в приложении, которую я хотел бы реализовать. Приложение имеет несколько ресурсов - фотографии, статьи и т. Д. В навигационной панели рядом с вкладками фотографий и статей были две кнопки - организационная и личная. Когда один клик на кнопку организации, если они затем нажимают на фотографии или статьи, они получают список всех фотографий и статей, принадлежащих членам их организации. Если они нажали на личную кнопку, и после этого они нажимают на фотографии или статьи, они получают списки только своих личных фотографий и статей, опуская ресурсы, принадлежащие другим членам их организации. Поэтому мне интересно, как это состояние сохраняется между запросами.Как иметь условные виды в Rails?
Я полагаю, что одним из способов было бы постоянно передавать переменную между представлениями и контроллером и на основе этой переменной перечислять определенный ресурс. Или, может быть, сохранить состояние в сеансе (хотя я полагаю, что это должно быть сделано в крайнем случае). Другой способ - использовать декоратор, такой как draper
, но я немного смущен об особенностях его реализации. Я был бы очень благодарен, если кто-то укажет мне на статью или на учебное пособие, в котором показано, как реализовать такую функцию или просто дается обзор шагов.
Чтобы быть ясным, еще раз: есть ссылки для индексации разных ресурсов, но на основе параметра действие индекса соответствующего контроллера возвращает разные результаты. Что-то вроде:
def index
if params[:type] == 'organization'
@photos = Organization.find_by(id: params[:organization][:id]).photos
else
@photos = User.find_by(id: params[:user][:id]).photos
end
end
Вопрос - как я могу передать параметр type
- жесткий код его в помощниках пути и имеют разные взгляды с различными значениями для этого параметра или есть способ лучше?
Это отношение моих моделей:
class User < ActiveRecord::Base
belongs_to :organization,
inverse_of: :members
has_many :photos,
inverse_of: :owner,
foreign_key: :owner_id,
dependent: :destroy
...
end
class Photo < ActiveRecord::Base
belongs_to :owner,
class_name: User,
inverse_of: :photos
belongs_to :organization,
inverse_of: :photos
...
end
class Organization < ActiveRecord::Base
has_many :members,
class_name: User,
inverse_of: :organization,
dependent: :destroy
has_many :photos,
inverse_of: :organization,
dependent: :destroy
...
end
Вещь - это фотография, принадлежащая как пользователю, так и организации, Пользователь принадлежит Организации, а Организация имеет множество пользователей и фотографий. –
не могли бы вы представить, как выглядят ваши модели (часть кода организации, пользователь, фотография, статья) –
Конечно, я редактировал мой вопрос. –