Rails 4 根据数据库中的变量渲染部分
Rails 4 render partial based on variable in database
我有 3 个不同的部分,并希望它们根据确切的产品(或数据库中的记录)显示在不同位置的视图中。在一些产品上,我只想显示 3 个部分中的 2 个。我将如何做到这一点?
谢谢。
假设您有一些模板,比如 products/show.html.erb
,您希望使用您的自定义逻辑来呈现您的部分,我建议您将您的条件逻辑嵌入到该模板中。这是一个我做了很多假设的例子;随时添加更多详细信息,我可以更新。
首先,我假设您的主要模板是您的 show
操作:
# products/show.html.erb
<h1>Product <%= @product.name %></h1>
<p><%= @product.description %></p>
<% if @product.is_fungible? %>
<%= render partial: 'products/fungible', locals: { product: @product } %>
<% end %>
<% if @product.is_edible? %>
<%= render partial: 'products/edible', locals: { product: @product } %>
<% else %>
<%= render partial: 'products/inedible', locals: { product: @product } %>
<% end %>
你的部分可能看起来像这样(请注意,因为我们已经将 product
作为局部变量传入,所以我们不需要在其中使用实例变量 @product
:
# products/_fungible.html.erb
<p>This product is definitely fungible, by a factor of <%= product.fungibility %>.</p>
我有 3 个不同的部分,并希望它们根据确切的产品(或数据库中的记录)显示在不同位置的视图中。在一些产品上,我只想显示 3 个部分中的 2 个。我将如何做到这一点? 谢谢。
假设您有一些模板,比如 products/show.html.erb
,您希望使用您的自定义逻辑来呈现您的部分,我建议您将您的条件逻辑嵌入到该模板中。这是一个我做了很多假设的例子;随时添加更多详细信息,我可以更新。
首先,我假设您的主要模板是您的 show
操作:
# products/show.html.erb
<h1>Product <%= @product.name %></h1>
<p><%= @product.description %></p>
<% if @product.is_fungible? %>
<%= render partial: 'products/fungible', locals: { product: @product } %>
<% end %>
<% if @product.is_edible? %>
<%= render partial: 'products/edible', locals: { product: @product } %>
<% else %>
<%= render partial: 'products/inedible', locals: { product: @product } %>
<% end %>
你的部分可能看起来像这样(请注意,因为我们已经将 product
作为局部变量传入,所以我们不需要在其中使用实例变量 @product
:
# products/_fungible.html.erb
<p>This product is definitely fungible, by a factor of <%= product.fungibility %>.</p>