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

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 Pettersson <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.

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

发自我的 iPhone

在 2011-8-1,5:38,Andrew Skegg <andrewskegg@me.com> 写道:

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.

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

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