Good work, it looks like you've stubbed out a lot of functions. When
you do get it to work, I'd love to list the models that need stubbing in
the documentation.
It may be easier to add a hobo_model declaration to your pseudo-model.
In that case, you would have to stub out the ActiveRecord functions
rather than the Hobo functions. Which is easier, I'm not sure, but
it's an option, anyways.
The error is saying that Hobo cannot find an input tag that will render
file, it thinks that file is an Object.
Perhaps you can make a reader function for file that coerces it to a
type that Hobo does know about, like so:
def file
@file.to_s
end
Or you could coerce it to rich type or something.
Bryan
François Beausoleil wrote:
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.