Rails 中的参数化嵌套 erb 组件

Parametrized nested erb components in Rails

我是 Rails 的新手,但有 React 经验。我想用 erb 文件来管理……我可以用 React 那样做:

class MyElement extends Component {
  render() {
    return <div>
      some text
      {this.props.myFirstParam + this.props.mySecondParam}
      some another text
    </div>
  }
}

class MyBody extends Component {
  render() {
    return <body>
      <MyElement myFirstParam={1} mySecondParam={2} />
      <MyElement myFirstParam={3} mySecondParam={5} />
      <MyElement myFirstParam={7} mySecondParam={3} />
    </body>
  }
}

我当然知道 Rails 在服务器端处理文件,但我只想展示组件嵌套的概念。我也想避免在方法中进行命令式字符串连接。有什么好的方法吗?

好的,我找到路了。我们可以用 render 函数来做到这一点。我创建了名为 _my_element.erb 的文件,如下所示:

<div>
  some text
  <%= myFirstParam + mySecondParam %>
  some another text
</div>

它位于 views 文件夹中,这似乎很重要。

我插入的 my_body 文件中的下一个:

<%= render partial: "my_element.erb",
    locals: {myFirstParam: 1, mySecondParam: 2} %>

出于某种原因,文件名应以 _ 字符开头,而 partial 参数中的路径不应包含它。

但毕竟,那行得通。

您已经给出了自己的解决方案,但让我为您可能想要的解决方案添加一个更清晰的方法。

如果您遵循 Rails 模式,您的 MyBodyController#show 方法设置 @my_body 并且您的 MyBody 有一个 has_many :my_elements 行。您现在可以输入:

<%= render @my_body.my_elements %>

您现在可以创建一个 'my_elements/_my_element.html.erb' 文件(是的,确实带有下划线),其中可以包含 HTML 以呈现评论块(如果您做错了这一步,Rails 将向您解释该怎么做)。由于它是一组记录,代码将对所有评论重复。

作为更一般的说明:在 Rails 中,您通常传递对象(带有值,但也有方法),而不仅仅是呈现该元素所需的一组有限的独立值。

另请参阅:http://guides.rubyonrails.org/layouts_and_rendering.html#passing-local-variables