critique of vibe.d

Jacob Carlborg via Digitalmars-d digitalmars-d at puremagic.com
Thu Jul 10 00:56:43 PDT 2014


On 09/07/14 21:37, Nick Sabalausky wrote:

> What I've started doing, and absolutely love so far, is to write my
> forms purely in the HTML template (with a little bit a custom
> tags/attributes), then use Adam's HTML DOM to read that HTML form and
> generate all the backend form-handing *from* the HTML form, including
> all the appropriate per-field "validation failed".
>
> I'm finding this works a lot better than defining forms in the backend
> code and then trying to generate the HTML I want from that.

To me that sounds a bit backwards. I'm not exactly sure what you mean by 
"backend form-handling" but in Rails all ActiveRecord classes can take a 
hash (associative array) in the constructor. The keys will match the 
fields (columns) on the class and the constructor will automatically 
assign all fields with the given values. This is called mass-assignment.

The view uses appropriate names for the form fields, scoped in the same 
name as the model, like this:

<input type="text" name="person[name]" />

So the only thing you need to do in the controller is something like this:

def create
   user = User.new(params[:user])
   user.save
end

In the view you use a form builder:

= simple_form_for @user do |f| do
   = f.input :name
   = f.input :admin
   = f.association :role
   = f.button :submit

Here I'm using a plugin called SimpleForm, it will automatically render 
the correct input form type based on the column type in the database. 
"name" will be render as a text input. "admin" will be render as a 
checkbox (since it's a boolean). It will also add labels and similar 
things. It can also generate all necessary code to be compatible with 
Bootstrap.

"f.association :role" is quite interesting. This expects there to be an 
association to the Role model in the User model. It will render a select 
tag populated with all the rows from the Role table.

The validation is handled in the model, where it belongs, when "save" is 
called in the controller. There's also a plugin that will automatically 
add JavaScript validations. It has duplicated the standard Rails 
validators in JavaScript. It will inspect the model, choose the correct 
validator and add it when rendering the view.

-- 
/Jacob Carlborg


More information about the Digitalmars-d mailing list