J'essaye d'utiliser le plugin Super Inplace Controls, qui a une méthode in_place_select. Je les modèles suivants:Rails: in_place_select Définir une clé étrangère
class Incident < ActiveRecord::Base
belongs_to :incident_status
validates_existence_of :incident_status
end
class IncidentStatus < ActiveRecord::Base
has_many :incidents
end
En ce moment, IncidentStatus est juste un identifiant et un nom (« Open » et « fermé »). Dans la vue de présentation d'Incident, je souhaite autoriser un utilisateur à cliquer sur l'état actuel et à le modifier à l'aide d'un menu de sélection. Donc, en show.html.erb, je donne les résultats suivants:
<p>
<b>Status:</b>
<%= in_place_select :incident, :incident_status_id, :choices => @statuses.map { |e| [e.name, e.id] }, :display_text => @status.name %>
</p>
Cela suit l'exemple donné dans le Super Inplace Controls documentation assez près, ce qui est:
<%= in_place_select :employee, :manager_id, :choices => Manager.find_all.map { |e| [e.name, e.id] } %>
Cela fonctionne vraiment bien jusqu'à ce que je cliquez sur OK pour changer le champ et soumettre le POST. Je vois le statut, puis quand je clique dessus, un menu déroulant apparaît avec 'Ouvrir' et 'Fermé'. Lorsque je sélectionne 'Fermé' et que j'appuie sur OK, le formulaire disparaît. Ce qui suit apparaît dans la console du serveur web:
Processing IncidentsController#set_incident_incident_status_id (for 127.0.0.1 at 2010-05-14 10:18:43) [POST]
Parameters: {"commit"=>"OK", "action"=>"set_incident_incident_status_id", "authenticity_token"=>"eahXrzwJwe+h2Byi1ELWXLy0QNmqF2EEXNw+eAfUJwU=", "id"=>"1", "controller"=>"incidents", "incident"=>{"incident_status_id"=>"1"}}
...snip...
ActionController::UnknownAction (No action responded to set_incident_incident_status_id. Actions: admin?, authenticated?, authorized?, create, destroy, edit, index, new, set_incident_incident_status, set_incident_title, show, and update):
Il semble donc être à la recherche d'une méthode « set_incident_incident_status_id ». Si je définis cette méthode dans mon contrôleur d'incident, cela semble aller, mais je n'ai aucune idée de la façon de récupérer le "incident_status_id" => "1" qui a été passé et défini comme la clé étrangère.
Des idées? Merci d'avance!