2011-12-22 66 views
1

前言:我是Rails的新手。对JQuery和json也是一种新鲜的东西。 我目前从我的控制器呈现HTML这样:在Rails 3视图中渲染html和json以与jQuery解析

def new 
    @customer = Customer.find(params[:id]) 
end 

我使用@customer实例来设置我的表单字段。我也有这种形式的两个选择帮手:

<%= select(:customer, :billing_type_id, BillingType.all.map{ |lk| [lk.name, lk.id] })%> 
<%= select(:customer, :account_id, Account.all.map{ |lk| [lk.number, lk.id] }) %> 

这两个选择列表都绑定到我的客户模型。 BillingType模型belongs_to帐户。 选择BillingType后,我想自动选择相关帐户。允许用户选择除默认值以外的帐户,这就是为什么两者都在客户模型上。自动选择帐户的目的纯粹是为了方便用户。

我的第一个想法是以某种方式返回BillingType.all.to_json作为我的控制器的新动作的一部分。然后,如果该json在客户端可用,我可以解析它并在JQuery中连线更改事件以在选择BillingType时选择默认帐户。

所以我的问题是真的分为两个部分:

  1. 什么是轨道的方式来完成设置相关的选择选项?

  2. 不管正确的方法是完成我的目标,我现在好奇如何从控制器操作同时返回json和html。我真的不认为我想从我的文档加载事件发出ajax请求,因为这需要往返服务器。有没有办法简单地将所有BillingType作为json呈现给标记,以便我可以用JQuery引用它并解析json?我觉得我想要做这样的事情:

jQuery中:

var obj = jQuery.parseJSON($("#billingtypes")); 

鉴于:

<span id="billingtypes"><%= BillingType.all.to_json %></span> 

我可能这一切都错了,但很欣赏了解如何处理我的两个问题。

回答

0

一种方法的确可以实现页面中的帐单类型。

东西沿着

var billingTypes = <%= BillingType.all.to_json %>; 

在您的网页上的脚本标记线将创建与信息javascript变量。无需解析!

另一种方法是你的选择标记添加数据属性的选项标签,即改变

<%= select(:customer, :billing_type_id, BillingType.all.map{ |lk| [lk.name, lk.id, :'data-account-id' => lk.default_account_id] } %> 

我假设在这里,您的帐单类型有default_account_id方法/属性返回的id要使用的帐户。我已经附加帐户的ID选择个别选项标签,然后你可以这样做

$('#id_of_your_select').change(function(){ 
    var accountId = $(':selected', $(this)).data('account-id'); 
// do something cool with accountId 
}); 
+0

选项标签是伟大的,我不知道你能做到但─它完全解决了我的问题!另外,直接在脚本标记中直接渲染BillingType json也是可行的。我想测试选项标签的想法,然后我将其标记为答案。 – 2011-12-22 02:21:24

+0

弗雷德里克,我测试了选项标签,它的工作,谢谢你的答案! – 2011-12-22 14:44:33

+0

对于阅读此内容的人来说,需要对javascript进行小的修改:\t $('#returned_check_billing_type_id')。change(function(){ \t var accountId = $(':selected',this).attr(' ); \t alert(accountId); \t //做一些很酷的事情,账号Id \t}); – 2011-12-23 14:43:20