Ruby on rails 如何基于用户属性显示视图?
在我的Rails应用程序中,我有一个包含产品和用户的商店。它们都有模型和控制器。 我想要实现的是,根据当前用户拥有的模型的属性,在视图模板上向其显示产品。例如,如果用户具有用户模型中的“女性”属性,则显示与此属性相关的一些产品。我怎样才能做到这一点 以下是我的产品视图,其中显示了所有产品:Ruby on rails 如何基于用户属性显示视图?,ruby-on-rails,ruby,model-view-controller,view,Ruby On Rails,Ruby,Model View Controller,View,在我的Rails应用程序中,我有一个包含产品和用户的商店。它们都有模型和控制器。 我想要实现的是,根据当前用户拥有的模型的属性,在视图模板上向其显示产品。例如,如果用户具有用户模型中的“女性”属性,则显示与此属性相关的一些产品。我怎样才能做到这一点 以下是我的产品视图,其中显示了所有产品: <% @products.each do |product| %> <%= render "product_row", product: product, order_item:
<% @products.each do |product| %>
<%= render "product_row", product: product, order_item: @order_item %>
<% end %>
_product_row.html.erb
<h4><%= product.name %></small></h4>
<div class="image">
<%= image_tag product.image.url(:original), class: "img-responsive" %></div>
<p>Some description.</p>
<a href="/bag/<%= product.id %>", class="add-to-cart">Add to Package</a>
一些描述
如何保存用户模型。如果您使用的是Deviate,那么您的视图中有当前的用户帮助器方法,您可以使用该方法获取curren_user.gender属性并基于此显示视图。听起来您需要根据用户类中的属性从产品类中检索对象。听起来像是一个基本服务对象,或者只是用户的一个方法:
class User < ActiveRecord::Base
def products_for_gender
if gender == 'female'
Product.where("do some logic here based on female")
elsif gender == 'male'
Product.where("do some logic here based on male")
else
#do some other logic just in case it's nil
end
end
end
在您的视图中,然后呈现包含这些产品的列表。这会阻止你把逻辑放在你的观点中,这很少是一个好主意
还有更多的抽象可能,if语句不是最漂亮的,但我相信这会涵盖你的问题。最后,您可以研究如何使用服务对象,例如,是的,我正在使用标准的设计配置。。我明白,但是代码在视图中应该是什么样子?这取决于你决定女性可以拥有什么样的产品,这更多的是一个商业逻辑,你在问题中没有提到。我在下面发布了一个答案,但是阅读下面的问题/答案也会帮助你谢谢Marthyn!“在这里做一些基于女性的逻辑”是什么意思?我应该把一个产品的属性放在那个里,还是不放?我的意思是,我不知道你们在使用什么逻辑,基于你们想要过滤的产品的什么属性?所以,如果性别是女性,那么获得所有产品,其中一些属性就是一些价值。产品。何处(属性:“价值”),这由您决定,我不知道您的产品表中有哪些属性我想谢谢您!请告诉我,如果要包含来自不同列的多个属性,该怎么办?假设我想基于几个用户属性检索对象?不仅针对性别,还针对其他列,然后如果所有这些都匹配用户属性来显示它们,这当然完全取决于用例。当然,您可以添加更多if语句。在我正在进行的一个项目中,我们有许多不同的属性组成了我们加载的文章。例如,如果当前用户有首选类别和首选标记,您可以像下面的
文章一样进行查询。其中(类别:当前用户。首选类别,标记:当前用户。首选标记)
我建议您阅读如何查询活动记录资源。没问题,很高兴提供帮助:)您能将答案标记为正确答案吗?
@products = current_user.products_for_gender