[英]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.