通过红宝石从下拉菜单中获取所选项目

时间:2015-11-16 06:40:01

标签: html ruby-on-rails ruby

我的问题是我的表格如下:

<select name="Users">
  <option value=""selected>Select user to add</option>
  <% notShareWith.each do |user| %>
    <option value=<%user.id%>><%=user.name+" "+user.email%></option>
  <% end %>
</select>
<% form_for @imageuser do |f| %>
  <%= f.hidden_field :user_id ,:value => 5 %>
  <%= f.hidden_field :image_id ,:value => @image.id %>
<% end %>

我的下拉菜单工作正常,它列出了有权访问的用户。我可以撤销访问权限和一切。我不知道如何知道从下拉菜单中选择了什么选项或如何将其提交到图像用户表单。我正在使用:

<% form_for @imageuser do |f| %>
  <%= f.hidden_field :user_id ,:value => 5 %>
  <%= f.hidden_field :image_id ,:value => @image.id %>
<% end %>

提交被选中的用户,但我需要知道所选项目的值是什么,所以我可以将所述值传递给:

<%= f.hidden_field :user_id ,:value => 5 %>

再次感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

您也可以使用options_from_collection_for_select

这样的事情应该有效

<% form_for @imageuser do |f| %>
  <%= f.select :user_id, options_from_collection_for_select(notShareWith, 'id', 'name'), prompt: 'Select user to add' %>
  <%= f.hidden_field :image_id ,:value => @image.id %>
<% end %>

答案 1 :(得分:0)

使用collection_select帮助器,如下所示:

<%= f.collection_select(:user_id, notShareWith.map { |user| user.id }, :id, :id, :prompt => 'Select') %>

然后,抓住所选的值,如:params[:user_id]

答案 2 :(得分:0)

要在表单中填写所选用户ID,您必须执行几个步骤

首先,在您的选项中添加id属性

<select id="user_id" name="Users">
  <option value=""selected>Select user to add</option>
  <% notShareWith.each do |user| %>
    <option value=<%user.id%>><%=user.name+" "+user.email%></option>
  <% end %>
</select>

然后,您可以使用javascript传递到imageuser表单:

<script type="text/javascript">
  $( document ).ready(function() {
    $("#user_id").change(function(){
      selected = $(this).val();
      $("#imageuser_user_id").val(selected);
    });
  });
</script

注意:

您最好使用select_tag帮助程序来创建选择选项

<%= select_tag 'user_id', options_for_select(notShareWith.collect{ |u| ["#{u.name} #{user.email}", u.id]}, prompt: "Select user to add") %>