Недавно я наткнулся на это руководство по обмену сообщениями , и меня заинтриговало использование Struct.new.С небольшой помощью Google и SO я узнал немного больше об использовании Struct в Ruby, но я хотел бы узнать немного больше о его использовании в 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
Однакопапка 'trash' создается на лету с помощью 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 с Rails?Почему он используется в этом руководстве для создания папки 'trash', а не папки 'inbox' (которую также можно создать при создании пользователя)?Спасибо за помощь, я еще не слишком много слышал о том, когда Struct можно / нужно использовать с Rails!