使用react.js渲染rails模型自定义getter

时间:2015-08-21 00:21:20

标签: ruby-on-rails reactjs

我已经开始使用react-rails gem,并且很难理解为什么我无法在react.js中呈现自定义模型属性。

所有数据库持久化属性都可以正常工作,它只是不返回任何内容的自定义getter。

为简单起见,这是我的User模型,email, first_name and last_name为持久属性。

class User < ActiveRecord::Base

  def full_name_and_email
    "#{first_name} #{last_name} (#{email})"
  end

end

在渲染我的视图时,我初始化了一个反应组件:

<%= react_component 'Header', { data: current_user } %>    

Header组件中,如果我在render函数中尝试以下内容:

var user = this.props.data;
...
return(
    <p>Welcome {user.email}</p>
)

我呈现的HTML是:

<p data-reactid=".0.0.2">
    <span data-reactid=".0.0.2.0">Welcome </span>
    <span data-reactid=".0.0.2.1">super_admin@email.com</span>
</p>

但是,如果我尝试

render(    
    <p>Welcome {user.full_name_and_email}</p>
)

我呈现的HTML结果为

<p data-reactid=".0.0.2">
    <span data-reactid=".0.0.2.0">Welcome </span>
</p>

我可能在这里遗漏了一些非常基本的东西,所以如果有人能帮我理解发生了什么事就会很棒!

谢谢!

1 个答案:

答案 0 :(得分:0)

重新阅读gem的文档后回答我自己的问题:

  

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

并将方法添加到to_json

current_user.to_json(methods: :full_name_and_email)