1

我有以下情况:

我有两个模型

  • 具有属性名称、risk_class_id、描述、级别的风险模型
  • 带有属性名称和描述的 Risk_Class 模型

一个风险有一个风险等级,一个风险等级有很多风险。这个协会运作良好。我可以将风险等级分配给风险。要创建风险,我使用以下表格:

<%= form_for @risk, :html => { :class => 'form-horizontal' } do |f| %>
<div class="control-group">
  <%= f.label :name, :class => 'control-label' %>
  <div class="controls">
    <%= f.text_area :name, :class => 'text_area' %>
  </div>
</div>
<div class="control-group">
  <%= f.label :risk_class_id, :class => 'control-label' %>
  <div class="controls">
    <%= collection_select( :risk, :risk_class_id, RiskClass.all, :id, :name, :prompt => true ) %>
  </div>
</div>
<div class="control-group">
  <%= f.label :description, :class => 'control-label' %>
  <div class="controls">
    <%= f.text_area :description, :class => 'text_area' %>
  </div>
</div>
<div class="control-group">
  <%= f.label :level, :class => 'control-label' %>
  <div class="controls">
    <%= f.text_area :level, :class => 'text_area' %>
  </div>
</div>
<div class="form-actions">
    <%= f.submit nil, :class => 'btn btn-primary' %>
</div>
<% end %>

现在我想让描述的 textarea 字段根据选定的风险类别预先填充,因为风险类别有描述。

感谢您的帮助!

编辑

我已将以下 javascript 代码添加到表单并编辑集合,选择以下方式:

<%= javascript_tag do %>
  function risk_class_selection(riskclassId){
    window.alert(riskclassId);
  } 
<% end %>
<div class="control-group">
  <%= f.label :risk_class_id, :class => 'control-label' %>
  <div class="controls">
    <%= collection_select( :risk, :risk_class_id, RiskClass.all, :id, :name, {:prompt => true} , {:onchange => "risk_class_selection(this.value)"}) %>
  </div>
</div>

解决方案:如果有人感兴趣,我按照 grotori 描述的方式进行操作,我的解决方案现在看起来像这样:

我有这个 risk.js 文件:

function risk_class_selection(riskclassId){
if (riskclassId != ""){
$.getJSON("/risk_classes/"+riskclassId+".json", function(data){
        if ( $('#risk_description').val() == "" ){
            $("#risk_description").val(data.description);
        }
        else{
            if ( confirm('Are you sure you want to change the risk description?') ){
                $("#risk_description").val(data.description);
            }
            else{
            }
        }
    }
)
}
else{}
}

在风险表单中,我有第一个 div 与 onchange 事件和第二个应该预填充 textarea 的地方:

<div class="control-group">
  <%= f.label :risk_class_id, :class => 'control-label' %>
  <div class="controls">
    <%= collection_select( :risk, :risk_class_id, RiskClass.all, :id, :name, {:prompt => true} , {:onchange => "risk_class_selection(this.value)"}) %>
  </div>
</div>
    <div class="control-group">
  <%= f.label :description, :class => 'control-label' %>
  <div class="controls">
    <%= f.text_area :description, :class => 'text_area' %>
  </div>
</div>
4

2 回答 2

0

您必须将 onchange 事件绑定到您的选择字段,该字段会将用户的选择发送回您的服务器,并使用 javascript 进行响应,该 javascript 将使用您想要的值重新呈现 textarea。

于 2013-05-02T09:08:14.797 回答
0

您可以在准备对象@risk 时在控制器中执行此操作。像这样的东西:

@risk = Risk.new(description: "blah blah")

然后表单将具有带有form_for标签的此值。

于 2013-05-02T08:57:39.000 回答