diff options
author | Gaël Deest <gael.deest@gmail.com> | 2010-03-18 23:12:16 +0100 |
---|---|---|
committer | wycats <wycats@gmail.com> | 2010-03-27 01:40:46 -0700 |
commit | 753304bd113d7524f6d48d220483a2723c534557 (patch) | |
tree | 0fd935d3ccfbca97fffa74a4188c36fa6d228c4b /activeresource | |
parent | 41e5c7ed44fedb95636ef9b7a792c46ea03309bd (diff) | |
download | rails-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.rb | 49 |
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 |