如何使用ruby on rails helpers来格式化json数据?

我花了几天的时间阅读和熟悉handlebars.js模板,这很棒。

现在我正在处理一个带有一堆html的partials,其中我使用了诸如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

Microposts帮手:

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时,它已经被正确格式化了。然后,我可以简单地显示我的把手变量正常。

这甚至会工作吗?

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

亲切的问候

0
额外
意见: 1

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代码。

另外,打破长链的方法调用可能会产生更多信息错误消息,并提供更清晰的机会来处理它们。

0
额外
当使用ajax获取get_microposts网址时,我收到状态码:500内部服务器错误。这之前没有发生过......不太清楚现在为什么会发生这种情况。
额外 作者 LondonGuy,
这是错误:NoMethodError(未定义的方法`formatted_json_data'为#):
额外 作者 LondonGuy,
这导致我的答案。谢谢
额外 作者 LondonGuy,
谢谢你的提示!我错过了逗号。无论如何,你对当前问题的处理方式更好,可扩展性更强。
额外 作者 thesis,
好吧,我不确定代码的其余部分是什么样的,所以你必须明智地调整我的答案,以便与其余部分一起工作。 500错误可能表示出现了ruby错误 - 如果您可以检查日志以查找错误的名称和回溯,那么可能会更多地了解它。
额外 作者 arcresu,
你有没有像我那样定义方法?我把它作为模型的一个实例方法,因为这对我来说似乎很明智。我不确定 htime_ago_in_words 是如何作用域的,因此如果将它作为一个帮手像你这样做更为实际,那么很重要,但重要的部分是通过像我一样添加大括号和逗号来修复哈希文字的语法。
额外 作者 arcresu,