1

我知道这听起来可能是一个“简单的问题”,但我是 Rails 新手,我不知道我的应用程序结构是否正确。

我的应用程序很“简单”,它必须连接网页并收集所有 JPG 链接并将链接存储在数据库中。

在我的“模型文件夹”中,我定义了我的功能:

  class JPG < ActiveRecord::Base
    acts_as_paranoid

    validates :title, :link, presence: true
    validates :link, uniqueness: true
    attr_accessible :tag_list, :id, :title
    #acts_as_taggable

     def main_web
      require 'rubygems'
      require 'scrapi'
      require 'uri'

      Scraper::Base.parser :html_parser 

      scraper = Scraper.define do
        array :items
        process "div.mozaique>div", :items  => Scraper.define {
          process "div.thumb>a", :link => "@href"

        }
        result :items
      end

      uri = URI.parse(URI.encode(web))
      return scraper.scrape(uri) 
    end
  end

如您所见,该函数main_web返回一个数组。

那么我的问题是“容易”。如果我想调用该函数并将信息存储在数据库中,我该怎么做?

我不想在屏幕上显示信息我只想将数据存储在数据库中但是我必须从哪里进行调用?看法?或控制器?

4

3 回答 3

0

在给予更多考虑后替换我最初的答案......

你正在这样做:

return scraper.scrape(uri) 

您分配给 @jpg 实例。因此,@jpg 不再是 JPG 的实例,因此无法保存。

此外,无需从控制器调用和存储。控制器比任何东西都更像是一个决策者。它确定状态并将控制和信息路由到所需的视图或模型。模型是应该管理数据的地方。不过,这可能是一个有争议的问题,也是我的看法。

推荐阅读: http ://sirupsen.com/what-I-wish-a-ruby-programmer-had-told-me-one-year-ago/

于 2013-08-31T00:27:43.760 回答
0

我建议您阅读有关控制器视图模型的更多信息。您需要从控制器调用并存储在数据库中。

于 2013-08-30T14:36:01.953 回答
0

如果 main_web 返回一个数组,那么 @jpg = @jpg.main_web 是否意味着 @jpg 现在是一个数组而不是 Active Record 模型?这似乎就是为什么它不会保存。您可能希望在数据库中添加一个字段,该字段包含您从 main_web 生成的数组。然后,您可以在 @jpg 模型上调用 save 而不是返回它。

如果您遇到模型或其他问题,那么一个很好的提示是真的尝试在命令行上输入“rails console”。你可以在那里运行你的 3 行代码,看看它们是否有效。这不会解决你的问题,但可能会让你玩一些事情。

@jpg = JPG.new
@jpg = @jpg.main_web
@jpg.save 
于 2013-08-30T15:46:14.280 回答