Каков наилучший способ сделать много CRUD в одном представлении (без использования ajax)? - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть 3 формы в виде «home», каждая форма отправляет свою модель, каждая форма перенаправляет на действие create в соответствующем контроллере. После создания каждого контроллера перенаправьте в представление администрирования, которое также индексирует каждую модель и предоставляет ссылки для редактирования и удаления.

Я не знаю, является ли этот подход хорошей практикой, поскольку мне приходится копировать все данные в administrator_controller, а также мне приходится копировать каждую модель в соответствующие контроллеры снова.

administrators_controller.rb

def home
    @user = Employee.new(role: :emp)
    @market = Market.find(params[:market_id])

    #INDEX EMPLOYEE:
    @employees = @market.users.where(role: :emp)

    #INDEX SERVERS:
    @server = Server.new(market_id: @market.id)
    @servers = @market.servers

    #INDEX TRAMITES:
    @task = Task.new(market_id: @market.id)
    @tasks = @market.tasks
 end

users_controller.rb

def edit
    @user = User.find(params[:id])
end

  def update
    @user = User.find(params[:id])
    if @user.update_attribute(:email, params[:user][:email])
      flash[:success] = "User updated"
      redirect_to market_admin_path(current_user.market_id)
    else
      render 'edit'
    end
  end

home.html.erb

<% provide(:button_text, 'create') %>
<%= render 'users/form', url: market_employees_path %>

<h1> Empleados: </h1>
<% @employees.each do |employee| %>
  <ul>
    <li><%= employee.email%> <%= link_to 'edit', edit_user_path(employee) %></li>
  </ul>
<% end %>

<br>

<h1> Servers: </h1>
<table style="width:100%">
<tr>
    <th>ID</th>
    <th>Descripcion</th>
  </tr>
 <%= render 'servers/form', url: market_servers_path %>

  <% @servers.each do |serv| %>
    <tr>
      <td><%= serv.id%></td>
      <td><%= serv.description%>  <%= link_to 'edit', edit_server_path(serv) %></td>
    </tr>
  <% end %>
</table>
<h1> Tramites: </h1>

<%= render 'tasks/form', url: market_tasks_path %>


<table style="width:100%">
  <tr>
    <th>ID</th>
    <th>Descripcion</th>
    <th>Duracion</th>
  </tr>

  <% @tasks.each do |task| %>
    <tr>
      <td><%= task.id%></td>
      <td><%= task.name%></td>
      <td><%= task.duration%> <%= link_to 'edit', edit_task_path(task) %></td>
    </tr>
  <% end %>

</table>

Пользователи / _form.html.erb

<%= form_for(@user, url: local_assigns[:url]) do |f| %>

  <%= render 'shared/flash_type', type: 'employee'%>

  <%= f.hidden_field :role %>

  <%= f.email_field :email, class: 'form-control' %>

  <%= f.submit yield(:button_text), class: "btn btn-primary" %>

<% end %>

routes.rb

resources :markets, only: [], shallow: true do
    resources :employees, only: [:create]
    resources :users, only: [:edit, :update]
    resources :tasks, only: [:create, :edit, :update]
    resources :servers, only: [:create, :edit, :update]
    get '/administration', :to => 'administrators#home', :as => :admin
end

Это на самом деле работает, но я хотел бы знать, есть ли лучший способ сделать это.

Примечание: класс 'employee' создан для использования шаблона объектов формы

...