2014-10-17 2 views
0

Приложение rails делает внешние запросы Salesforce через их API, чтобы вытащить некоторые записи. Когда я получаю эти записи в контроллере, я хотел бы использовать number_to_currency и link_to helper в некоторых из полей перед отправкой JSON в мое представление. Записи затем отображаются в отображаемой таблице. Я понимаю, что эти изменения должны будут иметь место в контроллере, но я не уверен, как это сделать перед обработкой json: @pendingloanparts.Рельсы используют помощников на полях перед созданием объектов JSON

Раньше стол выглядел так:

<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 

ответ

1

Первое: в соответствии с парадигмой MVC, форматирование должно быть сделано в представлении.
Чтобы добиться этого, Rails использует сборщики для отображения практически любого вида выходного формата.

Вы можете использовать jbuilder, чтобы использовать представления jbuilder для рендеринга JSON и в этом представлении типа ... json.jbuilder вы можете использовать помощники вида, как в любом другом представлении.

Сказал это, вы также можете нарушить правила MVC и включить помощников в контроллер. См. this answer.

+0

Jbuilder выглядит интересно. Я не уверен, как включить json.jbuilder в свой обычный файл view.html.erb и правильно ли он отформатирован в таблице? – Questifer

+0

Jbuilder решила мою проблему отлично. Спасибо за рекомендацию и объяснение. – Questifer

Смежные вопросы