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

时间:2012-05-24 15:57:57

标签: ruby-on-rails ruby json ruby-on-rails-3.2 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

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

这会工作吗?

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

亲切的问候

1 个答案:

答案 0 :(得分:4)

这是我建议的代码重写:

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

同样打破长链接方法调用可能会产生更多信息性错误消息,并提供更清晰的处理机会。