On Fri, Mar 8, 2013 at 3:27 AM, Linus Pettersson
<[email protected]> wrote:
> Hi
>
> I have an hstore field in my database where I store a lot of different
> fields.
>
> I still want getters, setters and validations for my fields so I've created
> an array with the fields like this:
>
> DOCUMENT_FIELDS = %w[foo bar baz]
>
> Then I do some meta programming to create getters and setters:
>
>   DOCUMENT_FIELDS.each do |field|
>     define_method(field) do
>       # ....
>     end
>
>     define_method("#{field}=") do |value|
>       # ...
>     end
>   end
>
> Now I would like to pass all fields to strong parameters to properly filter
> it. I tried like this:
> params.require(:foo).permit(Foo::DOCUMENT_FIELDS.map(&:to_sym))
>
> But this doesn't work. It removes all values anyway. I guess it is because
> `Foo::DOCUMENT_FIELDS.map(&:to_sym)` creates an array that is passed to
> strong parameters (and it seems to not work with arrays).
>
> How can I get around this?

`params.require(:foo).permit(*Foo::DOCUMENT_FIELDS.map(&:to_sym))`
Though if I'm honest I probably would expect you to not take the long
trip with map and to_sym, might as well just leave them as string keys
because params has indifferent access with default keys being all
string keys for security.

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to