我在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| %>
答案 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输入的内容来自下拉列表中的数据库。因此应该减轻风险。