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:从下拉菜单中选择编辑操作的主要内容,如果未能解决你的问题,请参考以下文章
带有 jQuery 的 Rails 中的动态下拉(选择框)菜单不可逆