I needed to write a record from a form via post, switch the type of data in 
the model threw me an error saying "wrong data type" my model is this: 
   -module (product, [
                   id, 
                   Name :: string () 
                   Price :: float () 
                   Description :: string ()]). 
   -compile (export_all). 



The idea is that by doing product:
 new (id, Req: post_param ("name"), Req: post_param ("price"), Req: 
post_param ("description")). 
save the data without problem. 

So I take the need to create a function that returns me all the validated 
data and I'll leave here for whoever needs it. 

# src / lib / utils_lib.erl 
-module(utils_lib).

-export([record_replace/2]).

record_replace(Model,Req) ->
        Attributes = [X || X <- boss_record_lib:attribute_names(Model),X =/= 
id],
        AttributeTypes = boss_record_lib:attribute_types(Model),
        Data = lists:map(fun(X) ->
                Param = Req:post_param(atom_to_list(X)),
                Value = case proplists:get_value(X,AttributeTypes) of
                    string -> Param;
                    integer ->  try list_to_integer(Param) of Integer -> 
Integer catch _:_ -> Param end;
                    float ->  try list_to_float(Param) of Float -> Float 
catch _:_ -> Param end;
                    _ -> Param
                end,
                {X,Value}
                end,
        Attributes),
        [X || X <- Data, 
proplists:get_value(list_to_atom(lists:nth(1,io_lib:format("~s",lists:map(fun(Key)
 
-> Key end, proplists:get_keys([X]))))),[X]) =/= []].


to use it just do the following in the controller:

product_create(Method, []) ->
    Model = product,
    case Method of
        'GET' ->
            {render_other, [{action, "product/product_create"}]};
        'POST' ->
            Data = utils_lib:record_replace(Model,Req),
            Record = boss_record:new(Model,Data),
            case Record:save() of
                {ok, SavedRecord} ->
                    {redirect, [{action, "product_list"}]};
                {error, Errors} ->
                    {render_other, [{action, "product/product_create"}], [{
errors, Errors}, {record, Record}]}
            end
    end.


-- 
You received this message because you are subscribed to the Google Groups 
"ChicagoBoss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
Visit this group at http://groups.google.com/group/chicagoboss.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/chicagoboss/2a419f6a-69c1-47df-9f16-100b55ef7072%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to