Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何基于用户属性显示视图?_Ruby On Rails_Ruby_Model View Controller_View - Fatal编程技术网

Ruby on 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:

在我的Rails应用程序中,我有一个包含产品和用户的商店。它们都有模型和控制器。 我想要实现的是,根据当前用户拥有的模型的属性,在视图模板上向其显示产品。例如,如果用户具有用户模型中的“女性”属性,则显示与此属性相关的一些产品。我怎样才能做到这一点

以下是我的产品视图,其中显示了所有产品:

<% @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