簡體   English   中英

帶有關聯的Ruby on Rails Activemodel

[英]Ruby on Rails Activemodel with Associations

實際上,我面對一些計算機科學的艱苦練習(我覺得很難,哈哈)。

我們正在使用Ruby on Rails做一些基本的東西,我必須打開一個csv文件來獲取有關我的'User'模型的附加信息,這是一個普通的rails腳手架。

所以目前我在users_controller.rb文件中打開csv文件並搜索正確的行,然后將它們添加到實例變量中。

但我想知道我是否可以編寫一個類似於ActiveRecord模型的類。 所以我更改代碼以使用ActiveModel。 但正如我在一些谷歌搜索結果中所讀到的那樣,ActiveModel無法像協會那樣使用ActiveRecord。 但擁有它們會很棒。

所以我希望你能幫助我。 我怎樣才能為我的模型提供像協會這樣的ActiveRecors?

問候梅蘭妮

CSV文件應該表示為模型,因為它的數據是絕對正確的。

然而,嘗試合並Active Model聽起來很棘手,幾乎肯定需要大量的黑客攻擊或猴子修補。

除非你真的需要與其他模型的關聯,否則我會在models目錄中創建一個獨立的類(即不從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

我不確切知道你的系統是如何工作的,但是這樣你可以使它的行為方式與Active Model相似。 您可以添加類似的類方法,每個實例方法代表一個CSV文件行。

每次,當您創建自己的模型時,它都是ActiveRecord的繼承:

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

然后你可以告訴你的模型有很多(比方說)項目的任務,它創建了一個關聯。 請提供您的應用程序邏輯的示例。

以下是RailsCasts.com的引用:

“在Rails 3中,Active Record的非數據庫功能被提取到Active Model中。這使您可以在無表格模型中干凈地添加驗證和其他功能。” 還有一個很好的描述如何通過添加模塊在模型中添加功能。

我明白,使用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時非常感謝你的幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM