ruby-on-rails - 在一个视图中执行多个 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
它确实有效,但我想知道是否有更好的方法来做到这一点。
注意:创建“员工”类以使用表单对象模式
解决方案
推荐阅读
- mongodb - Mongo shell 查询 - for 循环中的 .next() 返回最后一个输出
- django - Django rest api 过滤错误信息:django.core.exceptions.FieldError: Related Field got invalid lookup
- javascript - 按名称搜索用户的最佳方法是什么?
- c++ - 如何从多图中删除重复的字符串值
- jquery-ui - 多次使用 jquery-ui 滑块,但由 php 以编程方式设置不同的最小最大值
- elasticsearch - Kibana 可视化中的聚合聚合
- arrays - 使用 ReactJS 映射数组
- mysql - 如何从 Oracle 存储过程中选择/插入 MySQL 表?
- ruby - Ruby 对象 to_s 对象 id 的编码是什么?
- php - 是否可以删除当前帖子标题的最后一句话并回显结果?