Can anyone help me on the following? I have the following 2 arrays, how do i get c as a result of a and b. The elements should be in the specified order. a = ["(modulable_type=?) AND (parent_id=?) AND (status=?)","Task","2","20"] b = ["(tasks.due_date=?)", "2009-08-22"] c = ["(modulable_type=?) AND (parent_id=?) AND (status=?) AND (tasks.due_date=?)","Task","2","20","2009-08-22"] Thanks and Regards, Pratik
Answer:
======
a[0] = a[0] + " AND " + b[0]
b.length.times do |i|
if i!=0
a << b[i]
end
end
2009/8/23 tispratik <tispratik-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>:> > Can anyone help me on the following? > > I have the following 2 arrays, how do i get c as a result of a and b. > The elements should be in the specified order. > > a = ["(modulable_type=?) AND (parent_id=?) AND > (status=?)","Task","2","20"] > b = ["(tasks.due_date=?)", "2009-08-22"] > > c = ["(modulable_type=?) AND (parent_id=?) AND (status=?) AND > (tasks.due_date=?)","Task","2","20","2009-08-22"] >I have encountered exactly this problem and realised that, though this is solvable, it is better (if possible) to build the arrays differently in the first place. I realise this may not be possible for you but if you change the original conditions building so that it builds two arrays of the form conditions = ["(modulable_type=?)","(parent_id=?)"] and values = ["Task","2"] and so on, so just adding each condition and value as they arise, then the required result is c = [conditions.join(" AND ")] + values No doubt there are even better ways, and it may not match your needs anyway, but for me it worked well as I was working through a number of options building the conditions as I went. Colin and b similarly Then c = (a+b).collect(
Doing things like this, it may be easier to use the named placeholders
version - so your example will look like:
a = ["(modulable_type=:modulable_type) AND (parent_id=:parent_id) AND
(status=:status)",{:modulable_type => "Task", :parent_id =>
"2", :status => "20"}]
b = ["(tasks.due_date=:due_date)", {:due_date =>
"2009-08-22"}]
Then c is as simple as:
c = ["#{a[0]} AND #{b[0]}", a[1].merge(b[1])]
Note: this will fail in creative ways if you have parameters in a and
b that are supposed to have different values but have the same name,
so don''t do that. :)
--Matt Jones
On Aug 23, 4:23 am, Colin Law
<clan...-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org>
wrote:> 2009/8/23 tispratik
<tispra...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>:
>
>
>
> > Can anyone help me on the following?
>
> > I have the following 2 arrays, how do i get c as a result of a and b.
> > The elements should be in the specified order.
>
> > a = ["(modulable_type=?) AND (parent_id=?) AND
> > (status=?)","Task","2","20"]
> > b = ["(tasks.due_date=?)", "2009-08-22"]
>
> > c = ["(modulable_type=?) AND (parent_id=?) AND (status=?) AND
> >
(tasks.due_date=?)","Task","2","20","2009-08-22"]
>
> I have encountered exactly this problem and realised that, though this
> is solvable, it is better (if possible) to build the arrays
> differently in the first place. I realise this may not be possible
> for you but if you change the original conditions building so that it
> builds two arrays of the form
> conditions = ["(modulable_type=?)","(parent_id=?)"]
> and
> values = ["Task","2"] and so on, so just adding each
condition and
> value as they arise, then the required result is
> c = [conditions.join(" AND ")] + values
>
> No doubt there are even better ways, and it may not match your needs
> anyway, but for me it worked well as I was working through a number of
> options building the conditions as I went.
>
> Colin
>
> and b similarly
> Then c = (a+b).collect(
On Aug 23, 1:15 am, tispratik <tispra...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> Can anyone help me on the following? > > I have the following 2 arrays, how do i get c as a result of a and b. > The elements should be in the specified order. > > a = ["(modulable_type=?) AND (parent_id=?) AND > (status=?)","Task","2","20"] > b = ["(tasks.due_date=?)", "2009-08-22"] > > c = ["(modulable_type=?) AND (parent_id=?) AND (status=?) AND > (tasks.due_date=?)","Task","2","20","2009-08-22"] > > Thanks and Regards, > PratikInstead of doing funky array manipulation to build your model''s SQL find conditions, are you absolutely sure you shouldn''t just be using scopes instead?
pharrington wrote:> On Aug 23, 1:15�am, tispratik <tispra...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: >> (tasks.due_date=?)","Task","2","20","2009-08-22"] >> >> Thanks and Regards, >> Pratik > > Instead of doing funky array manipulation to build your model''s SQL > find conditions, are you absolutely sure you shouldn''t just be using > scopes instead?Or if not scopes, plain old conditions hashes. If you''re trying to use this as a :conditions parameter to find, remember that :conditions will also take a hash: ["(modulable_type=?) AND (parent_id=?) AND (status=?) AND (tasks.due_date=?)","Task","2","20","2009-08-22"] {:modulable_type => ''Task'', :parent_id => 2 ... } Best, -- Marnen Laibow-Koser http://www.marnen.org marnen-sbuyVjPbboAdnm+yROfE0A@public.gmane.org -- Posted via http://www.ruby-forum.com/.