3

実際、私はコンピューター サイエンスの難しい演習に直面しています (私には難しいと思います、笑)。

Ruby on Rails でいくつかの基本的なことを行っています。csv ファイルを開いて、通常の Rails 足場である「ユーザー」モデルに関する追加情報を取得する必要があります。

したがって、現時点では、users_controller.rb ファイルの csv ファイルを開き、正しい行を検索してインスタンス変数に追加します。

しかし、ActiveRecord Model のように振る舞うクラスを書けるだろうか。そこで、ActiveModel を使用するようにコードを変更します。しかし、いくつかのGoogleの結果を読んだように、ActiveModelはActiveRecordのような関連付けを利用できません。しかし、それらがあれば素晴らしいことです。

だから私はあなたが私を助けることができることを願っています. モデルに ActiveRecors のような関連付けを提供するにはどうすればよいですか?

こんにちはメラニー

4

3 に答える 3

1

CSV ファイルはデータなので、モデルとして表現する必要があります。

ただし、Active Model を組み込むのは難しいように思えます。ほぼ確実に、大量のハッキングやモンキー パッチが必要になります。

他のモデルへの関連付けが本当に必要でない限りActiveRecord::Base、モデル ディレクトリにスタンドアロン クラス (つまり、 から継承しない) を作成し、そこに CSV を解析するためのロジックを配置します。

class User
    attr_accessor :name, :email, ...

    def initialize(name,email,...)
        # set data
    end

    def self.find(param_for_search)
        # Parse CSV file, find line you want
        # return a User instance
        self.new(name, email)
    end
end

あなたのシステムがどのように機能するかは正確にはわかりませんが、このようにして、アクティブモデルのものと同様に動作させることができます. 同様のクラス メソッドを追加でき、各インスタンス メソッドは CSV ファイルの行を表します。

于 2012-11-27T11:03:43.230 に答える
0

毎回、独自のモデルを作成するときは、ActiveRecord の継承です。

class Project < ActiveRecord::Base
 attr_accessible :content, :name, :user
end

次に、関連付けを作成する多くの (たとえば) Project の Tasks を持つようにモデルに指示できます。アプリのロジックの例を提供してください。

以下はRailsCasts.comからの引用です。

「Rails 3 では、Active Record の非データベース機能が Active Model に抽出されています。これにより、検証やその他の機能をテーブルレス モデルにきれいに追加できます。」モジュールを追加して、モデルに機能を追加する方法についての素晴らしい説明もあります。

于 2012-11-27T10:57:55.537 に答える
0

ActiveRecord を使用してデータベース以外のソースを使用するのは難しいことは理解していますが、次のように記述できれば非常に魅力的だと思います。

user.worktimes.first.value

私の見解では、データベーステーブルのような情報を取得します。railscast.com にアクセスすると、これについて議論されているエピソードが見つかりました。しかし、私はこれをより深く掘り下げたいと思います。他に読めるリソースはありますか?

私が理解しているように、ActiveModel は関連付けをサポートしていませんか? 関連付けは非常に便利なものなのに、なぜ ActiveModel に移動しなかったのだろうか。:)

だからここに私が取り組んでいた私のコードがあります:

ユーザーモデル:

class User < ActiveRecord::Base
   attr_accessible :department_id, :name
   belongs_to :department 
end

部門モデル:

class Department < ActiveRecord::Base
  attr_accessible :name
  has_many :users
end

そして、これが私が作成した私のCSVモデルです:

class Worktime
    attr_accessor :user_id,:date,:value

    def initialize(params)
        dir = Rails.root.join('app', 'models', 'worktimes.csv').to_s
        source = File.open(dir,'r')
        while(line=source.gets)
            data = line.split(';')

            if data[0] = params[:user_id] && data[1] = params[:date]
                @value = data[2]    
            end
        end
    end
end

初めてRailsを使うので、よろしくお願いします。

于 2012-11-28T16:01:44.480 に答える