Validate HAML from ActiveRecord: scope/controller/helpers for link_to etc?
Posted
by Chris Boyle
on Stack Overflow
See other posts from Stack Overflow
or by Chris Boyle
Published on 2010-05-01T22:06:34Z
Indexed on
2010/05/01
22:17 UTC
Read the original article
Hit count: 251
I like HAML. So much, in fact, that in my first Rails app, which is the usual blog/CMS thing, I want to render the body of my Page model using HAML. So here is app/views/pages/_body.html.haml
:
.entry-content= Haml::Engine.new(body, :format => :html5).render
...and it works (yay, recursion). What I'd like to do is validate the HAML in the body when creating or updating a Page. I can almost do that, but I'm stuck on the scope
argument to render
. I have this in app/models/page.rb
:
validates_each :body do |record, attr, value|
begin
Haml::Engine.new(value, :format => :html5).render(record)
rescue Exception => e
record.errors.add attr, "line #{(e.respond_to? :line) && e.line || 'unknown'}: #{e.message}"
end
end
You can see I'm passing record
, which is a Page
, but even that doesn't have a controller, and in particular doesn't have any helpers like link_to
, so as soon as a Page uses any of that it's going to fail to validate even when it would actually render just fine.
So I guess I need a controller as scope for this, but accessing that from here in the model (where the validator is) is a big MVC no-no, and as such I don't think Rails gives me a way to do it. (I mean, I suppose I could stash a controller in some singleton somewhere or something, but... excuse me while I throw up.)
What's the least ugly way to properly validate HAML in an ActiveRecord validator?
© Stack Overflow or respective owner