aboutsummaryrefslogtreecommitdiffstats
path: root/activeresource
diff options
context:
space:
mode:
authorGaël Deest <gael.deest@gmail.com>2010-03-18 23:12:16 +0100
committerwycats <wycats@gmail.com>2010-03-27 01:40:46 -0700
commit753304bd113d7524f6d48d220483a2723c534557 (patch)
tree0fd935d3ccfbca97fffa74a4188c36fa6d228c4b /activeresource
parent41e5c7ed44fedb95636ef9b7a792c46ea03309bd (diff)
downloadrails-753304bd113d7524f6d48d220483a2723c534557.tar.gz
rails-753304bd113d7524f6d48d220483a2723c534557.tar.bz2
rails-753304bd113d7524f6d48d220483a2723c534557.zip
Makes ActiveResource work with form_for: - Adds a `build' method that can be used instead of `new' to load a new, unsaved resource from the remote site, filled with the correct default values. - Adds a `persisted?' method that simply returns the opposite value than the `new?' method. [#4222 state:resolved] [#4155 state:resolved]
Signed-off-by: wycats <wycats@gmail.com>
Diffstat (limited to 'activeresource')
-rw-r--r--activeresource/lib/active_resource/base.rb49
1 files changed, 49 insertions, 0 deletions
diff --git a/activeresource/lib/active_resource/base.rb b/activeresource/lib/active_resource/base.rb
index b841108bd1..67296a171a 100644
--- a/activeresource/lib/active_resource/base.rb
+++ b/activeresource/lib/active_resource/base.rb
@@ -625,6 +625,22 @@ module ActiveResource
"#{prefix(prefix_options)}#{collection_name}/#{id}.#{format.extension}#{query_string(query_options)}"
end
+ # Gets the new element path for REST resources.
+ #
+ # ==== Options
+ # * +prefix_options+ - A hash to add a prefix to the request for nested URLs (e.g., <tt>:account_id => 19</tt>
+ # would yield a URL like <tt>/accounts/19/purchases/new.xml</tt>).
+ #
+ # ==== Examples
+ # Post.new_element_path
+ # # => /posts/new.xml
+ #
+ # Comment.collection_path(:post_id => 5)
+ # # => /posts/5/comments/new.xml
+ def new_element_path(prefix_options = {})
+ "#{prefix(prefix_options)}#{collection_name}/new.#{format.extension}"
+ end
+
# Gets the collection path for the REST resources. If the +query_options+ parameter is omitted, Rails
# will split from the +prefix_options+.
#
@@ -653,6 +669,19 @@ module ActiveResource
alias_method :set_primary_key, :primary_key= #:nodoc:
+ # Builds a new, unsaved record using the default values from the remote server so
+ # that it can be used with RESTful forms.
+ #
+ # ==== Options
+ # * +attributes+ - A hash that overrides the default values from the server.
+ #
+ # Returns the new resource instance.
+ #
+ def build(attributes = {})
+ attrs = connection.get("#{new_element_path}").merge(attributes)
+ self.new(attrs)
+ end
+
# Creates a new resource instance and makes a request to the remote service
# that it be saved, making it equivalent to the following simultaneous calls:
#
@@ -989,6 +1018,22 @@ module ActiveResource
end
alias :new_record? :new?
+ # Returns +true+ if this object has been saved, otherwise returns +false+.
+ #
+ # ==== Examples
+ # persisted = Computer.create(:brand => 'Apple', :make => 'MacBook', :vendor => 'MacMall')
+ # persisted.persisted? # => true
+ #
+ # not_persisted = Computer.new(:brand => 'IBM', :make => 'Thinkpad', :vendor => 'IBM')
+ # not_persisted.persisted? # => false
+ #
+ # not_persisted.save
+ # not_persisted.persisted? # => true
+ #
+ def persisted?
+ !new?
+ end
+
# Gets the <tt>\id</tt> attribute of the resource.
def id
attributes[self.class.primary_key]
@@ -1346,6 +1391,10 @@ module ActiveResource
self.class.element_path(to_param, options || prefix_options)
end
+ def new_element_path
+ self.class.new_element_path(prefix_options)
+ end
+
def collection_path(options = nil)
self.class.collection_path(options || prefix_options)
end