【问题标题】:Rails use helpers on fields before building JSON objectsRails 在构建 JSON 对象之前在字段上使用帮助器
【发布时间】:2014-12-13 13:31:32
【问题描述】:

我的 rails 应用程序正在通过其 API 向 Salesforce 进行外部查询以提取一些记录。当我在控制器中收到这些记录时,我想在将 JSON 发送到我的视图之前在某些字段上使用 number_to_currency 和 link_to 帮助器。然后将记录呈现在要显示的表中。我知道这些修改必须在控制器中进行,但我不确定如何在渲染 json 之前进行修改:@pendingloanparts 运行。

以前的表格是这样的:

<td><%= loanpart.Loan__r.Business_Name__r.Name %></td>
<td><%= link_to loanpart.Loan__r.Name, loan_path(loanpart.Loan__r.Id) %></td>
<td><%= loanpart.Loan__r.Loan_Risk__c %></td>
<td><%= loanpart.Interest_Rate__c %>%</td>
<td><%= number_to_currency(loanpart.Amount_Lent__c) %></td>
<td><%= loanpart.Loan__r.Funded__c %>%</td>
<td><%= loanpart.Loan__r.Time_Left_on_Listing__c %></td>

我现在使用 AJAX 在收到响应时从 salesforce API 返回数据。

观点:

<script type="text/javascript">
  $.ajax({
    url: "/pull_pending_loans",
    dataType: "json",
    cache: false,
    success: function(data){
      $('#ajax-loader').hide()
      $.each(data, function(index, element) {
        console.log(element)
        $('#pendingloanlist tbody').append("<tr><td>" + element.Loan__r.Business_Name__r.Name + "</td><td>" 
                                                      + element.Loan__r.Name + "</td><td>"
                                                      + element.Loan__r.Loan_Risk__c + "</td><td>"
                                                      + element.Interest_Rate__c + "%" + "</td><td>"
                                                      + element.Amount_Lent__c + "</td><td>"
                                                      + element.Loan__r.Funded__c + "%" + "</td><td>"
                                                      + element.Loan__r.Time_Left_on_Listing__c + "</td></tr>");
      });
    }
  });
</script>

<div class="profile container content">
  <div class="row">
    <%= render 'lenders/sidebar' %> 
      <!-- Begin Content -->
        <div class="col-md-9">
          <div class="profile-body">
            <!-- Pending Loans -->
              <div class="panel panel-purple margin-bottom-40" id="small">
                <div class="panel-heading">
                  <h3 class="panel-title"><i class="fa fa-refresh"></i> Pending Loans</h3>
                </div>
                <div class="table-responsive">
                  <table class="table table-hover" id="pendingloanlist">
                    <thead>
                      <tr>
                        <th>Company</th>
                        <th>Loan Title</th>
                        <th>Risk</th>
                        <th>Rate</th>
                        <th>Amount</th>
                        <th>% Funded</th>
                        <th>Time Left</th>
                      </tr>
                    </thead>
                    <tbody>
                      <td colspan="100" id="ajax-loader">
                        <center><%= image_tag("loading.gif") %></center>
                      </td>
                    </tbody>
                  </table>
                </div>
              </div>                  
            <!-- Pending Loans -->
          </div>
        </div>
      <!-- End Content -->
    </div>
</div>

控制器动作:

def pull_pending_loans
  @user = current_user
  if @user.activated?
    client = Restforce.new
    @account = client.find('Account', @user.salesforce_id, 'Id')
    pending_query = "select Loan__r.Business_Name__r.Name, Loan__r.Id, Loan__r.Name, Loan__r.Loan_Risk__c, Interest_Rate__c, Amount_Lent__c, Status__c, Loan__r.Time_Left_on_Listing__c, Loan__r.Funded__c from Loan_Part__c where Account__c ='%s' AND Status__c = 'Pledge'" % @account.Id.to_s
    @pendingloanparts = client.query(pending_query)
    render json: @pendingloanparts
  end
end 

def pending_loans
  @user = current_user
end

【问题讨论】:

    标签: ruby-on-rails ajax salesforce


    【解决方案1】:

    首先:根据MVC范式,格式化应该在视图中完成。
    为了实现这一点,Rails 使用构建器来呈现几乎任何类型的输出格式。

    您可以使用 jbuilder 来使用 jbuilder 视图来呈现 JSON,并且在这种类型为 ...json.jbuilder 的视图中,您可以像在任何其他视图中一样使用视图助手。

    这么说,你也可以打破 MVC 规则,在控制器中包含助手。见this answer

    【讨论】:

    • Jbuilder 看起来很有趣。我不确定如何将 json.jbuilder 视图包含在我的普通 view.html.erb 文件中,并在表格中正确格式化?
    • Jbuilder 完美解决了我的问题。感谢您的推荐和解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-13
    • 2011-09-03
    • 1970-01-01
    • 1970-01-01
    • 2014-10-31
    • 1970-01-01
    相关资源
    最近更新 更多