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
我是 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