在轨道中显示已选择的项目选择下拉

时间:2016-12-06 15:16:47

标签: ruby-on-rails

我在rails中有一个选择框。编辑记录时,我希望突出显示以前选择的项目。

我有

    <div class="field">
    <td><%= f.label :keywords %>(Use Control-Click to select multiple keywords)</td>
    <td>  <%= f.select :keywords,
                       options_for_select(@keywords,
                       :selected => @keywords),
                       {:include_blank => false},
                       {:multiple => true, :size =>10}  %>

    </div>

我尝试了以下几种变体:selected =&gt;上面的陈述但不能得到我想要的。

我正在寻找的是当用户编辑记录时,f.select将预先选择数据库中的选择。

我确实在这里看到了“Gotcha”,即使项目是预选的,如果用户点击没有按住Control键点击的任何项目,那么预先选择的项目也会丢失。

--------更新-----------

表单

    <%= form_for @bedsheet_line, :html => 
{ :class => 'form-horizontal', multipart: true} do |f| %>

1 个答案:

答案 0 :(得分:0)

我得到了这个工作。

我将表单下拉元素更改为

<%= f.select :keywords,
                               options_for_select(@keywords,
                               :selected =>     previous_keywords),
                               {:include_blank => false},
                               {:multiple => true, :size =>11}  %>

区别在于所选的=&gt;正在调用名为previous_keywords的def。

previous_keywords在我的控制器中,看起来像

#----------------------------------------以前的关键字---- ------------------------------------------   #这是为了获取已为床单输入的关键字。如果床单记录是这样的话   #编辑,然后在编辑记录时选择关键字。   #   #注 - eval函数存在风险。但是,由于这是一个内部应用程序,输入来自   #a选择框,那么风险应该是可以接受的。

 helper_method :previous_keywords

  def previous_keywords



   @current_bedsheet_line = BedsheetLine.find(params[:id])           # grab the current bedsheet line
    @previous_keywords = @current_bedsheet_line.keywords              # get the keywords for the current bedsheet line

    keywords = Array.new

    keywords  = eval(@previous_keywords)                              # NOTE - the eval function is risky if there is any outside traffic.

   return keywords
  end

注意 - 评估函数存在风险。但是,此应用程序仅供内部使用,不处理财务或其他敏感数据,并且从eval输入的内容来自下拉列表中的数据库。因此应该减轻风险。