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:
parent
41e5c7ed44
commit
753304bd11
1 changed files with 49 additions and 0 deletions
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue