Re: [Rails] Re: Access a “session” variable in a nested model

Colin Law
Thu, 17 Nov 2011 21:34:23 -0000

On 17 November 2011 19:26, Angelo Cordova
<acordinz-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
wrote:
> the validation is for quantity of products, the idea is, if the user
> try to enter a quantity greater than the available quantity of
> products, then the validation error must show up.
>
> The problem is, products are in differents storages, and storages
> belongs to a branch (a company or enterprise has a main office and has
> many branches). so, I have to start my validation finding the storages
> that belongs to a certain branch, when I have the storages I have to
> find the product and get the total quantity of that product.
>
> The thing is that, to get the branch id, I need to access to
> "session[:user].branch_id", but I can''t do that in the
model.

Can''t you get at the branch via the invoice?

>
> Can you give me, please, an example of the last option
>
> "If all else fails you could add a non-database attribute to invoice
> details and set that prior to saving, then pick it up in the
> validation."
>
> I don''t know how to add a non-database attribute in a _partial for
> nested attributes, neither how to set it prior to saving

Actually you probably can''t do this directly when you are using
accepts nested attributes as you don''t have a point in the controller
at which you can set the variable before saving.  However, if the
branch is not available already via the invoice then provide a class
member variable of Invoice (look up member variables and attr_accessor
if you don''t know how to do this, note, not attr_accessible), and set
the branch id there before the save or update_attributes in the
controller.  However, as I suggested above, I would have thought the
invoice would already contain information about the branch.

By the way, it is better to interleave your reply with the previous
post rather than putting it at the top, then you will not have to
repeat sections from my post as you did above, and it will be easier
to follow the thread.

Colin

> On 17 nov, 13:59, Colin Law
<clan...-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org> wrote:
>> On 17 November 2011 16:46, Angelo Cordova
<acord...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:
>>
>> > Hello people.
>>
>> > I have a big problem here. In my rails 3.0.9 app I have a model
>> > "invoice" that model "accepts nested
attributes" for "invoice
>> > details". So, I don''t have a "controller"
nor "views" for "invoice
>> > details", just model, because I have a "partial" in
"invoices views"
>> > for the "nested attributes".
>>
>> > The thing is that I need to run a custom validation when every
>> > "invoice details" is created, and I need a variable
stored in
>> > "session". But Models can not access "session"
variables.
>>
>> > So I want to know, how can I access that variable and then use it
in
>> > my validation.
>>
>> Is the custom validation to do with data in the invoice?  I believe
>> you can access the invoice that the details belong to in the
>> validation.
>>
>> Also possibly reject_if on accepts_nested_attributes_for might do the
job.
>>
>> If all else fails you could add a non-database attribute to invoice
>> details and set that prior to saving, then pick it up in the
>> validation.
>>
>> Colin
>
> --
> You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
> To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
> To unsubscribe from this group, send email to
rubyonrails-talk+unsubscribe@googlegroups.com.
> For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.
>
>



--
gplus.to/clanlaw

--
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk+unsubscribe@googlegroups.com.