Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.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 在Rails中将2个表导出为CSV[如何选择特定列?]_Ruby On Rails_Csv_Datatables_Export To Csv - Fatal编程技术网

Ruby on rails 在Rails中将2个表导出为CSV[如何选择特定列?]

Ruby on rails 在Rails中将2个表导出为CSV[如何选择特定列?],ruby-on-rails,csv,datatables,export-to-csv,Ruby On Rails,Csv,Datatables,Export To Csv,我一直在尝试将数据库导出到Rails中的CSV。经过多次尝试和错误,我终于让它工作了,现在我的CSV由完整的2个表组成 然而,我似乎无法从每个表中仅提取某些列-hourlog名称、hourlog描述、hourlog小时数、hourlog创建时间和附加照片中用红色标记的项目名称 我在网上找到的所有解决方案都是用来提取整个表的 这是我的hourlog模型: class Hourlog < ApplicationRecord belongs_to :user belongs_t

我一直在尝试将数据库导出到Rails中的CSV。经过多次尝试和错误,我终于让它工作了,现在我的CSV由完整的2个表组成

然而,我似乎无法从每个表中仅提取某些列-hourlog名称、hourlog描述、hourlog小时数、hourlog创建时间和附加照片中用红色标记的项目名称

我在网上找到的所有解决方案都是用来提取整个表的

这是我的hourlog模型:

class Hourlog < ApplicationRecord

    belongs_to :user
    belongs_to :project
    accepts_nested_attributes_for :project
    validates :name, presence: true
    validates :description, presence: true
    validates :hours, presence: true
    validates :date, presence: true
    validates :project, presence: true

      def self.to_csv
        CSV.generate do |csv|
          csv << column_names
          all.each do |hourlog|
            csv << (hourlog.attributes.values_at(*column_names) + hourlog.project.attributes.values )
          end
        end
      end
end
def index 
    @user = User.all
    @filter = Filter.first
    @project = Project.all
    [... a bunch of code that defines @hourlogs...] 

    respond_to do |format|
      format.html
      format.csv { render text: @hourlogs.to_csv }
    end
end 
这是一种观点:

<%= link_to "CSV", hourlogs_path(format: "csv") %>
这是项目的模式:

create_table "projects", force: :cascade do |t|
    t.string   "name"
    t.text     "description"
    t.string   "plan"
    t.integer  "planhours"
    t.integer  "thours"
    t.datetime "created_at",                    null: false
    t.datetime "updated_at",                    null: false
    t.datetime "plandate"
    t.datetime "starthourtrack"
    t.integer  "duration"
    t.text     "notes"
    t.boolean  "status",         default: true
  end
任何帮助都会被感激的,我已经挣扎了10个小时了,似乎无法得到它。 我尝试创建一个单独的index.csv.erb文件,列出标题名称,选择hourlog.name,而不是hourlog.attributes.values,位于*column\u名称处,但我似乎无法正确理解语法/逻辑。 谢谢

[编辑:解决方案]
看起来我只是需要一些括号-我添加了特定的列名以限制显示的列的数量,然后我写出了我需要的每一列hourlog.name、hourlog.description等等-我没有意识到我需要把它们放在[],在csv之后,看起来我只是需要一些括号-我添加了特定的列名以限制显示的列的数量,然后我写出了我需要的每一列hourlog.name、hourlog.description等-我没有意识到我需要将它们放在csv之后的[]中
create_table "projects", force: :cascade do |t|
    t.string   "name"
    t.text     "description"
    t.string   "plan"
    t.integer  "planhours"
    t.integer  "thours"
    t.datetime "created_at",                    null: false
    t.datetime "updated_at",                    null: false
    t.datetime "plandate"
    t.datetime "starthourtrack"
    t.integer  "duration"
    t.text     "notes"
    t.boolean  "status",         default: true
  end
def self.to_csv
        CSV.generate do |csv|
          column_names = %w(Project Name Description Hours Date)
          csv << column_names
          all.each do |hourlog|
            csv << [hourlog.project.name, hourlog.name, hourlog.description, hourlog.hours, hourlog.created_at]
          end
        end
      end
def self.to_csv
        CSV.generate do |csv|
          column_names = %w(Project Name Description Hours Date)
          csv << column_names
          all.each do |hourlog|
            csv << [hourlog.project.name, hourlog.name, hourlog.description, hourlog.hours, hourlog.created_at]
          end
        end
end