首页 > 解决方案 > 在一个视图中执行多个 CRUD 的最佳方法是什么(不使用 ajax)?

问题描述

我在一个名为“home”的视图中有 3 个表单,每个表单提交不同的模型,每个表单重定向到相应控制器中的创建操作。创建每个控制器后重定向到管理视图,该视图还索引每个模型并提供编辑和删除链接。

我不知道这种方法是否是一个好习惯,因为我必须在 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

主页.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 %>

路线.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

它确实有效,但我想知道是否有更好的方法来做到这一点。

注意:创建“员工”类以使用表单对象模式

标签: ruby-on-railsrubyformsdesign-patternscrud

解决方案


推荐阅读