簡體   English   中英

使用Ruby on Rails在JSON Feed中呈現動態變量

[英]Render Dynamic Variables in JSON Feed with Ruby on Rails

我只是在為我們的客戶創建一個API,以便與我們的主要Rails 3應用程序進行交互。

一方面,我希望json響應包含某種形式。 基本上是一些我們控制並在其網站上顯示的表單代碼。

我可以正常工作(簡體):

def login_form
  @response = Form.find_by_something(params[:something_else])
  if @response 
    render :status=>200, :json=>{:response => @response} 
  end
end

在客戶端,我可以獲取:

@logins = HTTParty.get("#{set_auth_url}/api/v1/logins.json?auth_token=xyz&something_else=abc").parsed_response

並顯示表格

= @logins["response"].html_safe

問題是,表單代碼具有一些動態變量:

例如:

<div class="login">
  <FORM name="form1" METHOD="get" action="<%= request.path %>?">
  <INPUT TYPE="HIDDEN" NAME="chal" VALUE="<%= params['challenge'] %>">
  <% if @current_location['success_url'] %>
    <INPUT TYPE="HIDDEN" NAME="userurl" VALUE="/success">
  <% end %>
  <input type="hidden" name="UserName" placeholder="Username" value="<%= @user['username']['username'] %>">
  <input type="submit" name="login" value="Login" class="btn">
</div>

我想知道這是否是個好主意? 如果是這樣,我該如何在html中分解這些變量?

如果不是這樣,有人可以推薦一種更好的方法來解決它。

准備響應時,這些變量在服務器端是否已知? 在那種情況下,我將嘗試通過模板引擎來運行它們:json=> { :response => ERB.new(@response).result(binding) } -客戶端只會收到適用於他的情況的html。

為什么不像在Jquery模板,Mustache或Handlebar中那樣使用Javascript模板

所以像這樣將表單保存在客戶端

我將在這里使用小胡子來描述它。

...

    <script id="template" type="text/template">
      <div class="login">
      <FORM name="form1" METHOD="get" action={{request_path}}>
      <INPUT TYPE="HIDDEN" NAME="chal" VALUE={{challenges}}>
      {{boolean_value}} 
      <INPUT TYPE="HIDDEN" NAME="userurl" VALUE="/success">
      {{/boolean_value}}
      <input type="hidden" name="UserName" placeholder="Username" value={{user_name}}>
      <input type="submit" name="login" value="Login" class="btn">
     </div>
    </script>

</html>

下一部分以ajax形式獲取響應

我想使用任何Javascript框架都可以實現,我在這里使用jQuery

<script type="text/javascript">
  $(document).ready(function() {
    $.ajax({
      // make ajax call over here
      success: function(data)  {
        // JSON DATA 
         var template = $('script#template').html();
         $([container where html is place]).html(Mustache.to_html(template,data));
      }

    })
 })

希望這個幫助

不知道要如何獲取form_tag的純HTML標記標簽,因為它不包含真實性令牌

希望這個幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM