Add virtual attribute

Hi!

Let’s say I have an app that handles a TODO list. The list has finished
and
unfinished items. Now I want to add two virtual attributes to the list
object; the count of finished and unfinished items in the list. I also
need
these to be displayed in the json output.

How do I achieve that?

Best Regards
Linus

On 31 July 2011 20:00, Linus P. [email protected]
wrote:

Hi!
Let’s say I have an app that handles a TODO list. The list has finished and
unfinished items. Now I want to add two virtual attributes to the list
object; the count of finished and unfinished items in the list. I also need
these to be displayed in the json output.
How do I achieve that?

Define two scopes on List that return the finished and unfinished items
then use
List.unfinished.count

Colin

I already have done that, like this:

def unfinished_items
self.items.where(“status = ?”, false)
end

def finished_items
self.items.where(“status = ?”, true)
end

So I can use the List.unfinished… But how do I add it as attributes
to
the json output?

Linus P. <linus.pettersson@…> writes:

So I can use the List.unfinished… But how do I add it as attributes to
the json output?

Seems you are confusing search patterns with object output. Your JSON
output
should already include a “status” field.

Well, yes but that’s not the point.

Items have a status field. Lists has many items.
When displaying a List as JSON I want it to have an attribute that
counts
how many finished items there are in the list and how many unfinished
items
there are in the list. The above methods only fetches the items, and I’d
have to count the result of that of course.

Acts_as_api will help you. It is a really awesome gem.

发自我的 iPhone

在 2011-8-1,5:38,Andrew S. [email protected] 写道:

class TodosController < ApplicationController
def show
@todo = Todo.find(params[:id])
respond_to do |format|
format.json { render_for_api :public, :json => @todo }
end
end
end

class Todo < ActiveRecord::Base
has_many items

acts_as_api

api_accessible :public do |t|
t.add “items.finished_items.all”, :as => finished_items
t.add “items.unfinished_items.all”, :as => unfinished_items
t.add “items.finished_items.count”, :as => num_of_finished_items
t.add “items.unfinished_items.count”, :as => num_of_unfinished_items
end
end

class Item < ActiveRecord::Base
belongs_to todo

scope :finished_items, where(:status => ‘finished’)
scope :unfinished_items, where(:status => ‘unfinished’)

acts_as_api
end

On Mon, Aug 1, 2011 at 11:49 PM, Linus P. <
[email protected]> wrote:

“Ruby on Rails: Talk” group.
To view this discussion on the web visit
https://groups.google.com/d/msg/rubyonrails-talk/-/gy0mFW1iV44J.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.


Tower He

On 4 August 2011 09:28, Annapoorna R [email protected] wrote:

hi…
i got prob with creating mailer in rails 3
i used rails g mailer UserMailer… … how to define method in
usermailer…?n cal that method…?

What has that got to do with the subject of this thread, which is Add
virtual attribute? It is best to start a new thread for a new
subject, with a subject line that matches the question.

Colin

hi…
i got prob with creating mailer in rails 3
i used rails g mailer UserMailer… … how to define method in
usermailer…?n cal that method…?