J'ai une ligne dans mon routes.rb à la carte mon modèle de l'album comme une ressource:avec Redirige DataMapper & Rails
map.resources :albums
Cependant, l'utilisation DataMapper en place de ActiveRecord Rails, pourquoi cette ligne:
format.html { redirect_to(@album) }
provoquent une redirection vers:
albums/%23<Album:0x72d452c>
au lieu de:
albums/1
Dans le cas où un contexte plus est nécessaire, toute ma méthode de création du contrôleur est répertorié ici:
def create
@album = Album.new(params[:album])
respond_to do |format|
if @album.save
flash[:notice] = 'Album was successfully created.'
format.html { redirect_to(@album) }
format.xml { render :xml => @album, :status => :created, :location => @album }
else
format.html { render :action => "new" }
format.xml { render :xml => @album.errors, :status => :unprocessable_entity }
end
end
end
Comme convention, cette méthode est appelée à la suite d'une soumission de formulaire de ma « nouvelle «méthode dans la new.html.erb: méthode
<h1>New album</h1>
<% form_for(@album) do |f| %>
<p>
<%= f.label :name %><br />
<%= f.text_field :name %>
</p>
<p>
<%= f.label :description %><br />
<%= f.text_field :description %>
</p>
<p>
<%= f.label :genre %><br />
<%= f.text_field :genre %>
</p>
<p>
<%= f.label :country %><br />
<%= f.text_field :country %>
</p>
<p>
<%= f.submit 'Create' %>
</p>
<% end %>
<%= link_to 'Back', albums_path %>
Wow. Ça a marché. Mais pourquoi cela a-t-il fonctionné? Dans mon exemple, qu'est ce que le "% 23"? N'est-ce pas une sorte de représentation brute de l'objet Album? Donc, en créant la méthode to_param, comment cela assure-t-il que l'id de l'objet est représenté à la place de la représentation de l'objet? Est-ce parce qu'il existe une méthode par défaut to_param qui représente l'objet comme ce code: "% 23 "? Incroyable. J'aimerais savoir comment vous avez compris cela. Vous devez vraiment bien comprendre les entrailles de Rails. –
Baker
Les entrailles doivent faire un respond_to? Vérifiez avant d'appeler to_param, car les méthodes d'itinéraire acceptent également les entiers, les tableaux et les hachages. % 23 est un encodage URL de # , qui est plus ou moins comment Ruby expose des objets via la méthode inspect, sauf si ces objets, comme ActiveRecord, ont surchargé cette méthode. Puisque votre modèle DM n'est pas un AR ou un tableau ou un hachage, vous appelez simplement to_s sur l'objet, probablement dans le cadre d'une interpolation de chaîne. J'ai eu l'occasion de bousiller l'objet que j'envoyais à une méthode de route, donc j'ai déjà vu ce problème. –
austinfromboston
Merci d'avoir expliqué. – Baker