【问题标题】:Render Dynamic Variables in JSON Feed with Ruby on Rails使用 Ruby on Rails 在 JSON 源中呈现动态变量
【发布时间】:2012-09-29 03:56:25
【问题描述】:

我只是想为我们的客户创建一个 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 中分解这些变量??

如果不是,有人可以推荐一个更好的方法来解决它。

【问题讨论】:

  • 所以您将 html 模板存储在数据库中并将它们返回给客户端以在其网页中呈现?只是为了确定。
  • 嘿。部分 - 只是表单代码。
  • @simonmorley 表单数据是否保持不变而不采用实际内容使用javascript模板对此有更好的解决方案
  • 看起来表单应该是一个视图。表单html存储在数据库中是否有任何原因?

标签: ruby-on-rails ruby ruby-on-rails-3 json api


【解决方案1】:

为什么不使用 Javascript 模板,如在 Jquery 模板或 Mustache 或 Handlebar 中

所以像这样将表单保存在客户端

我会在这里用 Mustache 来描述它 ....

...

    <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 html 标签而不是 form_tag,因为它不包含真实性令牌

希望有帮助

【讨论】:

  • 感谢您的回复。我以前没有使用过这两种方法。我很困惑这是如何要求的?我需要他们的 get 请求才能将表单完整地拉下来。
  • 我花了一些时间来解决这个问题,很抱歉我不能给你赏金。不确定这是否完全正确,但它几乎就在那里。再次感谢。
【解决方案2】:

在准备响应时,这些变量在服务器端是否已知?在这种情况下,我会尝试通过模板引擎:json=&gt; { :response =&gt; ERB.new(@response).result(binding) } 运行它们 - 客户端只会收到适用于他的情况的 html。

【讨论】:

  • 嘿。谢谢。这是否意味着我将标准变量留在 text_input 中?其余的由 Rails 完成?
  • 这行得通,但是有些代码会从 url 中提取参数。 这没有被渲染。获取这些参数的方法是什么?
猜你喜欢
  • 2012-06-24
  • 2013-12-21
  • 2013-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多