4
最近我碰到了this messaging tutorial,並且被Struct.new的使用所吸引。從谷歌和SO的一些幫助,我已經瞭解了更多關於在Ruby中使用Struct,但我想知道更多關於它在Rails中的用法。在本教程中,有存儲用戶收到郵件的文件夾模式:使用Struct with Rails
class Folder < ActiveRecord::Base
acts_as_tree
belongs_to :user
has_many :messages, :class_name => "MessageCopy"
end
時會創建一個新的用戶創建的「收件箱」文件夾:
class User < ActiveRecord::Base
has_many :sent_messages, :class_name => "Message", :foreign_key => "author_id"
has_many :received_messages, :class_name => "MessageCopy", :foreign_key => "recipient_id"
has_many :folders
before_create :build_inbox
def inbox
folders.find_by_name("Inbox")
end
def build_inbox
folders.build(:name => "Inbox")
end
end
然而,「垃圾」文件夾是使用Struct.new創建的:
class MailboxController < ApplicationController
def index
@folder = current_user.inbox
show
render :action => "show"
end
def show
@folder ||= current_user.folders.find(params[:id])
@messages = @folder.messages.not_deleted
end
def trash
@folder = Struct.new(:name, :user_id).new("Trash", current_user.id)
@messages = current_user.received_messages.deleted
render :action => "show"
end
end
使用Struct with Rails有什麼好處?爲什麼它在本教程中用於創建「垃圾」文件夾而不是「收件箱」文件夾(也可以在創建用戶時構建)?感謝您的幫助,我還沒有遇到太多網上關於什麼時候Struct可以/應該與Rails一起使用!
感謝您的意見,Struct in Rails的使用似乎並不普遍我猜測?它看起來對於無表模型最爲有用...... – Budgie 2010-09-02 13:36:16
是的,它就像一個便捷類,當你只想存儲一些屬性並通過常規方法讀/寫它們時。否則哈希將起作用,但OStruct對於這種用例也很酷。 – 2010-09-02 14:37:52