Персонализированные представления для конкретного c контроллера Rails - PullRequest
0 голосов
/ 29 мая 2020

Цель состоит в том, чтобы создать представления для данного класса, которые персонализированы для данного пользователя. Модель и логики контроллера c остаются прежними, но макет и представление записи будут зависеть от предпочтений пользователя.

Учитывая уникальность User.id, легко можно создать application_controller logi c для использования макет с этим id.

layout = @user.layout

Макет сможет вызывать свои персонализированные CSS.

Но что насчет представлений? а маршрутизация? Учитывая класс Product, как

resources :products

может вызывать подкаталог app/views/products, чтобы использовать подкаталог идентификатора пользователя, скажем,

app/views/products/10

Таким образом, приводя к структуре файлов

app/views/products/10/show.html.erb
app/views/products/10/edit.html.erb
app/views/products/10/index.html.erb
app/views/products/11/show.html.erb
app/views/products/11/edit.html.erb
app/views/products/11/index.html.erb
app/views/products/12/show.html.erb
app/views/products/12/edit.html.erb
app/views/products/12/index.html.erb

1 Ответ

0 голосов
/ 29 мая 2020

Отвечая на ваш вопрос, у вас есть вызов render в каждом методе в контроллере.

def show
  ...
  render "user/show/#{params[:id]}.html.erb"
end

Дополнительная информация здесь: https://guides.rubyonrails.org/layouts_and_rendering.html#using -render

Но , если они ПОЛНОСТЬЮ не отличаются, было бы лучше использовать одно и то же представление для каждой записи и сохранить поле для каждой из них с параметрами для управления представлением.

@user.layout = {header: true, footer: false, ...}

И в представлении:

<% if @user.layout[:header] %> 
   <div>....</div>
<% end %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...