Hi!
I'm offering an import form for my users. The import model itself
isn't a real ActiveRecord model. How can I benefit from all of
DRYML's goodies, without using a hobo_model?
Using a hobo controller, I have this error when rendering the new
form:
HoboError in ImportsController#new
No input tag for file:Object (this=nil)
RAILS_ROOT: /Users/francois/Projects/dons_amateurs
Application Trace | Framework Trace | Full Trace
vendor/plugins/hobo/hobo/taglibs/rapid_forms.dryml:289:in `input'
/Users/francois/Projects/dons_amateurs/vendor/plugins/hobo/hobo/lib/
hobo/dryml/template_environment.rb:328:in `_tag_context'
/Users/francois/Projects/dons_amateurs/vendor/plugins/hobo/hobo/lib/
hobo/dryml/template_environment.rb:248:in `new_context'
/Users/francois/.rvm/gems/ruby-1.8.7-p248/gems/actionpack-2.3.5/lib/
action_view/helpers/capture_helper.rb:129:in `with_output_buffer'
/Users/francois/Projects/dons_amateurs/vendor/plugins/hobo/hobo/lib/
hobo/dryml/template_environment.rb:248:in `new_context'
/Users/francois/Projects/dons_amateurs/vendor/plugins/hobo/hobo/lib/
hobo/dryml/template_environment.rb:328:in `_tag_context'
vendor/plugins/hobo/hobo/taglibs/rapid_forms.dryml:261:in `input'
vendor/plugins/hobo/hobo/taglibs/core.dryml:7:in `send'
vendor/plugins/hobo/hobo/taglibs/core.dryml:7:in `call_tag'
/Users/francois/Projects/dons_amateurs/vendor/plugins/hobo/hobo/lib/
hobo/dryml/template_environment.rb:328:in `_tag_context'
/Users/francois/Projects/dons_amateurs/vendor/plugins/hobo/hobo/lib/
hobo/dryml/template_environment.rb:248:in `new_context'
/Users/francois/.rvm/gems/ruby-1.8.7-p248/gems/actionpack-2.3.5/lib/
action_view/helpers/capture_helper.rb:129:in `with_output_buffer'
/Users/francois/Projects/dons_amateurs/vendor/plugins/hobo/hobo/lib/
hobo/dryml/template_environment.rb:248:in `new_context'
/Users/francois/Projects/dons_amateurs/vendor/plugins/hobo/hobo/lib/
hobo/dryml/template_environment.rb:328:in `_tag_context'
vendor/plugins/hobo/hobo/taglibs/core.dryml:6:in `call_tag'
I have mostly faked my way out of everything. Notice the model at the
bottom. But that error has me stumped... I'm probably returning a bad
value from some method.
Thanks!
François
class Import
attr_accessor :file, :dry_run
attr_reader :encoding, :imported
def initialize(params={})
@dry_run = true
params.each do |key, value|
send("#{key}=", value)
end
# TODO: Allow user-specified encodings
@encoding = "windows-1252"
end
def new_record?
true
end
def dry_run=(value)
case value
when "1", 1, true
@dry_run = true
else
@dry_run = false
end
end
def errors
@errors ||= ActiveRecord::Errors.new(self)
end
def validate
errors.clear
errors.add_on_blank(:file)
return if @file.blank?
errors.add(:file, "must be a ZIP file") unless
File.extname(@file.original_filename).downcase == ".zip"
errors.add(:file, "must not be empty") if
File.size(@file.path).zero?
return unless errors.empty?
errors.add_to_base("dry-run specified: not importing") if @dry_run
# more validations
end
def valid?
validate
errors.empty?
end
def save
return false unless valid?
# import
true
end
#
# The next 3 methods are for ActiveRecord::Errors
#
def self.human_name
self.name
end
def self.human_attribute_name(attribute_name)
attribute_name.to_s.humanize
end
def self.self_and_descendants_from_active_record
[self]
end
#
# The following 20 or 30 methods are to support Hobo/ActiveRecord
#
def self.has_lifecycle?
false
end
def self.view_hints
class_name = "#{name}Hints"
class_name.safe_constantize or Object.class_eval("class
#{class_name} < Hobo::ViewHints; end; #{class_name}")
end
Column = Struct.new(:name, :type, :default)
def self.columns
[Column.new("id", :integer, nil), Column.new("file", :string,
nil), Column.new("dry_run", :boolean, true)]
end
def self.content_columns
columns.select {|column| %w(file dry_run).include?(column.name)}
end
def self.column_names
columns.map(&:name)
end
def self.attr_protected(*args)
# ignored
end
def self.column(name)
columns.detect {|column| column.name == name}
end
def self.never_show?(*args)
false
end
def self.creator_attribute
:creator_attribute
end
def self.primary_content_attribute
:primary_content_attribute
end
def self.attr_order
[:file, :dry_run]
end
def self.reflections
Hash.new
end
def self.name_attribute
:name_attribute
end
def self.user_new(*args)
new(*args[1..-1])
end
def self.to_url_path
"#{name.underscore.pluralize}"
end
def to_url_path
"#{self.class.to_url_path}/#{to_param}" unless new_record?
end
def self.typed_id
HoboFields.to_name(self) || name.underscore.gsub("/", "__")
end
def typed_id
"#{self.class.name.underscore}:#{self.id}" if id
end
def creatable_by?(user)
true
end
def editable_by?(user, field=nil)
true
end
end
--
You received this message because you are subscribed to the Google Groups "Hobo
Users" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/hobousers?hl=en.