【发布时间】:2015-08-13 20:50:21
【问题描述】:
在我的 rails 应用程序中,我有一个下拉菜单,用户可以选择一个帐户进行付款:
//_payment.html.erb
<div class="field" id="payment-to-account">
<%= f.label 'Payment To:' %><br>
<%= f.collection_select :to_account_id, @liability_account_payment_list, :id, :account_details, {include_blank: 'Please Select'} %>
</div>
当用户选择一个帐户时,我会根据他们的选择在此表单中呈现部分内容:
//_payment.html.erb
<%= form_for(@transaction,
as: :transaction,
url:
@transaction.id ? account_transaction_path(@account, @transaction) : account_transactions_path) do |f| %>
...
<% @f = f %>
<div id="to-account-form" style="display:none;"></div>
...
<script>
jQuery(function(){
$("#payment-to-account").change(function() {
var selected_item = $( "#payment-to-account option:selected" ).text();
var selected_item_index = $( "#payment-to-account option:selected" ).index();
//looks for account type in parentheses followed by space moneysign " $"
var regExp = /\(([^)]+)\)\s\$/;
var matches = regExp.exec(selected_item);
// array of account ids in order of list
var payment_account_ids = <%= raw @payment_list_ids %>;
switch (matches[1]) {
case 'Mortgage':
$('#to-account-form').html("<%= j render 'payment_to_mortgage', f: @f %>");
$('#to-account-form').slideDown(350);
break;
case 'PersonalLoan':
case 'CreditCard':
case 'StudentLoan':
case 'OtherLiability':
$('#to-account-form').html("<%= j render 'payment_to_all_other_liabilities', f: @f %>");
$('#to-account-form').slideDown(350);
break;
default:
$('#to-account-form').html("<br>" + "Contact support, an error has occurred");
$('#to-account-form').slideDown(350);
}
});
});
</script>
现在它会根据选择呈现正确的部分,但是当部分加载时,我需要来自帐户模型的更多信息。我创建了一个名为 find_pay_to_account 的方法,该方法在 Accounts 模型中输入选定的帐户 ID,该模型根据 ID 查找帐户。
当用户从下拉列表中选择帐户时,我希望在加载的部分上调用该方法,以便在用户提交表单之前向用户显示有关他们正在付款的帐户的其他信息。但我不知道怎么做。我想在我的 jQuery switch 语句中添加类似的内容。
selected_account_id = payment_account_ids[selected_item_index-1]
@payment_to_account = Account.find_pay_to_account(selected_account_id)
由于 rails 在后台预加载了部分,因此在 case 语句中对我的部分渲染进行以下更改仍然无效:
从这里
$('#to-account-form').html("<%= j render 'payment_to_mortgage', f: @f %>");
到这里
$('#to-account-form').html("<%= j render 'payment_to_mortgage', f: @f, @payment_to_account: @payment_to_account %>");
我做了一些搜索,发现使用 AJAX 可能会有所帮助:
Pragmatic Studio
Rails Cast
但我正在尝试访问模型,而不是控制器,并且我正在尝试更新部分表单。这样做的正确方法是什么?
这是显示用户流程的图片。在最后一张图片中可以看到我正在尝试更新的示例。选择抵押账户时,需要显示抵押账户的最低还款额。现在它显示为零,因为部分渲染使用了来自 BOA 种子 0214 的所有信息。
【问题讨论】:
标签: javascript jquery ruby-on-rails ajax