1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

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>
This commit is contained in:
Gaël Deest 2010-03-18 23:12:16 +01:00 committed by wycats
parent 41e5c7ed44
commit 753304bd11

View file

@ -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