Rails 5:从下拉菜单中选择编辑操作

Posted

技术标签:

【中文标题】Rails 5:从下拉菜单中选择编辑操作【英文标题】:Rails 5: select from drop-down menu for edit action 【发布时间】:2016-10-10 10:04:54 【问题描述】:

我有查看 common/roles/index.html.erb,我可以在其中单击 un 用户名,这会打开特定用户角色以进行编辑操作:

<ul class="users">
<% @companies.each do |company| %>
<% company.users.each do |user| %>
    <% for role in user.roles %>
    <li><%= link_to user.name, edit_common_role_path(role.id) %></li>
    <% end %>
<% end %>
<% end %>
</ul>

属于 current_user 公司的所有用户都可以找到用户。用户 ID 放置在“user_id”列的角色表中。

在我的 controllers/common/roles_controller.rb 我有这个:

def index
@roles = current_user.roles
if @roles.any?  |role| role.viewer_rights? || role.editer_rights? ||
 role.creater_rights? || role.deleter_rights? 
  @viewer_editer_creater_deleter = true
else redirect_to errors_path
end
@companies = current_user.companies.includes(:users)
end

def edit
@roles = current_user.roles
if @roles.any?  |role| role.editer_rights? || role.creater_rights? || role.deleter_rights? 
  @editer_creater_deleter = true
else redirect_to errors_path
end
@companies = current_user.companies.includes(:users)
@roles = Role.find(params[:id])
end

如何创建下拉菜单,其中特定用户选择时,编辑操作的用户角色信息将加载到下拉菜单下面?从那里我需要能够做更新操作用“提交”按钮。在不重新加载页面的情况下这样做会很好。感谢您的帮助!

更新

我已经在视图中创建了这个,它给了我可以选择用户的下拉菜单:

<% @companies.each do |company| %>
  <% company.users.each do |user| %>
   <option value="<%= user.id %>"><%= user.name %></option>
   <% end %>
<% end %>

现在我需要添加功能,该功能在选择时会导致特定用户角色的编​​辑页面。一个选项可以是在此视图中加载特定用户的角色信息,然后使用提交按钮保存更改。

【问题讨论】:

【参考方案1】:

您可以在没有 JQuery 的情况下实现类似的功能。

在您的路线中,

get '/edit_common_role', to: 'common_roles#edit'

在视图中,

<% @companies.each do |company| %>
  <% company.users.each do |user| %>
    <%= form_tag '/edit_common_role', method: :get do %>
      <%= select_tag :id, options_from_collection_for_select(user.roles, 'id', 'name') %>
      <%= submit_tag "Go" %>
    <% end %>
  <% end %>
<% end %>

我假设你的榜样有name 方法,因此name 被添加到collection_from_select 中。您可以将其更改为您想要的任何内容。 将选择 id,对于每个 id,您将获得不同常见角色对象的编辑页面。

【讨论】:

谢谢。我正在尝试实现这一点,但是,我的用户列表不再位于下拉菜单中。据我了解,您建议从下拉菜单中选择用户,然后加载角色,然后完成对角色的更改并确认“开始”按钮,对吧?【参考方案2】:

我想我已经解决了我的第一个问题 :) 这里的代码似乎对我有用:

<div class="form-group">
    <label class="col-sm-2 control-label">User name</label>
    <div class="col-sm-10"><select class="form-control m-b" name="users" id="user_list">
    <option value="">Please, select user</option>
      <% @companies.each do |company| %>
        <% company.users.each do |user| %>
          <% for role in user.roles %>
             <option value="<%= user.id %>" data-edit-url="<%= edit_common_role_path(role.id) %>"><%= user.name %></option>
             <script type="text/javascript">
              $('#user_list').change(function() 
              window.location = $(this).find(":selected").data('edit-url');
              );
         </script>
       <% end %>
      <% end %>
    <% end %>
   </select>
  </div>
 </div>

如果我可以优化或做得更好,请发表评论!

【讨论】:

以上是关于Rails 5:从下拉菜单中选择编辑操作的主要内容,如果未能解决你的问题,请参考以下文章

带有 jQ​​uery 的 Rails 中的动态下拉(选择框)菜单不可逆

Rails表单中的下拉菜单和常量的使用

引导表分页下拉菜单不起作用 - Rails

Active Admin - 根据第一个下拉菜单刷新第二个下拉菜单,Ruby on Rails

VB界面设计中下拉菜单的分隔条怎么做

Ruby on Rails 表单添加带有文本框的“其他”选项以选择下拉菜单