react-rails gem不能与to_json一起使用

时间:2015-08-05 23:22:07

标签: ruby-on-rails reactjs react-rails

每当我尝试在react_component帮助器上将其他选项传递给to_json时,它就会被解析为反应道具的纯字符串。

<%= react_component "SelectableActivityLevel", 
  phase: UserService.active_phase(@user).to_json(methods: "pictures_url"),
  activity_levels: @activity_levels
%>

结果

this.prop.activity_levels //Object (correct)
this.prop.phase //String (incorrect)

宝石的文档说:

  

props可以是响应#to_json的对象,也可以是   已经字符串化的JSON对象(例如,使用Jbuilder制作,请参阅注释   下文)。

这没什么帮助。

Jbuilder示例也没有帮助,因为我正在使用to_json。

谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

我使用 as_json 代替

解决了这个问题
<%= react_component "SelectableActivityLevel", 
  phase: UserService.active_phase(@user).as_json(methods: :pictures_url),
  activity_levels: @activity_levels
%>

为什么?

to_json 正在返回字符串转义。  例如:

=> "{\"name\":\"bla bla\"}"

反应轨道只是在它是一个字符串时将prop作为字符串。 (第3行)

    html_options[:data].tap do |data|
      data[:react_class] = name
      data[:react_props] = (props.is_a?(String) ? props : props.to_json)
    end

不知道大型系列的性能问题,但我基本上只是将一个简单的对象序列化为一些字段,所以我根本不用担心它。