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

时间:2016-10-10 10:04:55

标签: jquery ruby-on-rails ruby select views

我查看了 common / roles / index.html.erb ,我可以点击非用户名,打开特定用户角色进行编辑操作:

<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 %>

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

2 个答案:

答案 0 :(得分:0)

没有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方法,因此在collection_from_select中添加了name。您可以将其更改为您想要的任何内容。 将选择id,对于每个id,您将获得不同公共角色对象的编辑页面。

答案 1 :(得分:0)

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

<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>

如果我可以优化或做更好的事情,请评论!