【问题标题】:How do I format json data with ruby on rails helpers?如何使用 ruby​​ on rails helpers 格式化 json 数据?
【发布时间】:2012-05-24 15:57:56
【问题描述】:

过去几天我一直在阅读并熟悉 handlebars.js 模板,这很棒。

现在我正在处理我的一个部分,它有一堆 html,我在其中使用了一些帮助程序,例如 simple_format、time_ago_in_words 等等。显然,这些助手不能与车把一起使用。所以我想做这样的事情:

def get_micropost

   respond_to do |format|   
     format.json { render json: formatted_micropost_json_data(Micropost.where("id < ?", params[:micropost_id]).first) } 
   end

end

微博助手:

module MicropostsHelper

    def formatted_micropost_json_data(micropost)

        content: simple_format h(micropost.content)
        created_at: time_ago_in_words(micropost.created_at)
        id: micropost.id
        image: micropost.image
        link: micropost.link
        poster_id: micropost.poster_id
        updated_at: micropost.updated_at 
        user_id: micropost.user_id 

    end

end

因此,当我通过 ajax 调用返回 JSON 时,它的格式已经正确。然后我可以简单地像往常一样显示我的车把变量。

这还能用吗?

如果不是,最好的方法是什么?

亲切的问候

【问题讨论】:

    标签: ruby-on-rails ruby json ruby-on-rails-3.2 handlebars.js


    【解决方案1】:

    这是我建议的代码重写:

    class Micropost
      def formatted_json_data
        {
          content:    simple_format(h(self.content)),
          created_at: time_ago_in_words(self.created_at),
          id:         self.id,
          image:      self.image,
          link:       self.link,
          poster_id:  self.poster_id,
          updated_at: self.updated_at,
          user_id:    self.user_id
        }
      end
    end
    
    def get_micropost
      respond_to do |format|   
        format.json do
          posts = Micropost.where("id < ?", params[:micropost_id])
          data = posts.first.formatted_json_data
          render(json: data)
        end
      end
    end
    

    你想在你的方法中添加一个哈希字面量——你最初拥有的不是语法上有效的 ruby​​ 代码。

    此外,分解一长串的链式方法调用可能会产生更多信息性错误消息,并提供更清晰的处理机会。

    【讨论】:

    • 感谢您的提示!我错过了逗号。无论如何,您针对当前问题的方法更好,并且可扩展性更高。
    • 使用 ajax 获取 get_microposts url 时出现状态代码:500 内部服务器错误。这以前没有发生过。不太清楚为什么现在会发生。
    • 嗯,我不确定你的代码的其余部分是什么样子的,所以你必须明智地调整我的答案才能使用它的其余部分。 500 错误可能表明出现了 ruby​​ 错误 - 如果您可以检查日志以找到错误的名称和回溯,那么这可能会更清楚地说明它。
    • 这是错误:NoMethodError (undefined method `formatted_json_data' for #<0x0000010525b830>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-04
    • 2010-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多