Ruby on rails Rails中的复杂渲染

Ruby on rails Rails中的复杂渲染,ruby-on-rails,ruby,ruby-on-rails-3,mongodb,mongoid,Ruby On Rails,Ruby,Ruby On Rails 3,Mongodb,Mongoid,大约一个星期以来,我一直在试图获得一个视图来渲染。我有一个需要能够导出集合的应用程序,因此我决定使用一个在web浏览器中呈现为.txt和.csv的行分部。到目前为止,在使整个集合(逐行)渲染方面,效果很好。但是,我很难让某些集合对象(在本例中是产品)基于某个属性(size元素)进行自我复制 下面的代码就是我现在所处的位置 控制器 class PexportController

大约一个星期以来,我一直在试图获得一个视图来渲染。我有一个需要能够导出集合的应用程序,因此我决定使用一个在web浏览器中呈现为
.txt
.csv
的行分部。到目前为止,在使整个集合(逐行)渲染方面,效果很好。但是,我很难让某些集合对象(在本例中是产品)基于某个属性(size元素)进行自我复制

下面的代码就是我现在所处的位置

控制器
class PexportController@产品如果我了解您在做什么,您会有一个产品列表,但是如果这些产品条目有多个尺寸,则其中一些产品条目应显示为多个产品。假设这是正确的,您的逻辑有点不正确:
new\u products\u返回一个数组,该数组作为单个元素添加到
@products
数组的末尾。所以你不知道该怎么处理。您可以尝试以下方法:


p.attributes
将为您提供模型的所有属性,包括
id
创建的属性、
更新的属性,这些属性可能会干扰您的操作。

备选答案:您有什么理由需要在控制器中复制整个对象吗?在您看来,您可以通过这样做来简化事情:



除非你的
语句很奇怪,因为如果它是
Fixnum
,它会在检查它是否是之前抛出一个
NoMethodError
,因为
Fixnum
没有
空?
。非常感谢你的洞察力和快速回复。我忘了提到我有另一个视图文件“…..我想这涵盖了那个产品。你提到的新行?基本上有大约200个属性,所以我制作了一个带有标题的模板,然后每个行中都有一个部分,你是ruby新手,嘿?当您学习该语言时,您将发现许多简洁的细节,这些细节将帮助您简化代码。例如,整个视图只需
即可完成。是的,只需大约5-6个月。感谢您注意=)lol…不过我确实尝试了一些类似于示例视图的方法,但遇到了一些问题,因为我有多个导出模板,需要以多种格式呈现(有些产品甚至需要不同的标题、特定于类别的格式)。我发送的最后一行是一个补丁,用于解决我在使用制表符分隔的txt视图时遇到的问题。好的,我认为您需要为您的问题添加更多细节。没有所有的信息很难帮上忙。这是我最初的路线,只是无法让它玩得很好。我可以用两个不同的部分替换“”和“”?……即。我也这么认为,尽管这看起来像是不必要地重复代码。在你的问题中有更多的细节会很有帮助,也许还有一点关于你想做什么的上下文(例如,为什么size属性是一个数组,为什么这意味着你需要为它复制产品)。对于某些数据源格式,产品选项(在本例中是size)必须在csv或txt输出中有自己的行。假设产品xyz的尺寸为1,2,3。提要的输出必须类似于|第1行|产品xyz大小1 |第2行|产品xyz大小2 |第3行|产品xyz大小3….并且提要将持续迭代所有产品,如果它在大小属性数组中包含任何值,则会复制自身。就上下文而言,当我说feed时,我指的是第三方渠道,如google、amazon、ebay等。另外,我有一个show.text.erb文件,用于分隔各种feed…因此,例如_amazon.text.erb将有所有amazon feed标题和_p.text.erb(部分行)会有所有属于这些标题栏的变量我后退了一步,停止了复杂化的事情,并将代码插入到和之间..工作得很有魅力。非常感谢你的帮助和耐心。祝你周末假期愉快!
class PexportController < ApplicationController
  layout 'csv'

  def index
  end

  def show
    @feed_template = params[:id]
    @products = Product.find :all
    @products.each do |product|
      unless product.size.nil? || product.size.empty? || product.size.kind_of?(Fixnum)
        @products << new_products_for(product)
      end
    end

    respond_to do |format|
      format.html
      format.text
    end
  end

  private

  def new_products_for(product = {})
    products = Array.new
    product.size.each do |p|
      products << Product.new(p.attributes)
    end
    products
  end
end
<%= render partial: 'pexport/p', collection: @products %>
<%= p.sku %>  <%= p.name %> <%= p.price %> ......
@my_products = Product.find :all
@products = []
@my_products.each do |p|
  if p.size.blank? || p.size.kind_of?(Fixnum)
    @products << p 
  else
    @products += new_products_for(p)
  end
end
products << Product.new(:sku => p.sku, :name => p.name, ...)
<% if p.size.is_a?(Array) %>
  <% p.size.each do |s| %>
    <%= p.sku %>  <%= p.name %> <%= p.price %> <%= s %>
  <% end %>
<% else %>
  <%= p.sku %>  <%= p.name %> <%= p.price %> <%= p.size %>
<% end %>