2010-05-11 21 views
0

Je voudrais activer la fonctionnalité modifier en place dans une vue qui affiche des valeurs de différents modèles:Comment utiliser do edit-in-place sur trois modèles différents à partir d'une vue pour un modèle que ces trois appartiennent?

Voici ce que j'utilise actuellement et il ne fonctionne pas, mais je voudrais des alternatives:

J'ai un modèle appelé Campaign. Dans le contrôleur, je fais ce qui suit à la liste, dans l'ordre, les trois modèles qui belong_to une campagne:

<% @campaign_events = campaign_events %> 
<% @campaign_events.each do |campaign_event| %> 
    <% model_name = campaign_event.class.name.tableize.singularize %> 
    <p> 
     <%= link_to campaign_event.title, send("#{model_name}_path", campaign_event) %> 
     <span class='model_name'>(<%= model_name.capitalize %>)</span> 
     <%= campaign_event.days %> Days 
    </p> 
<% end %> 

campaign_event est un campaign_helper défini comme:

module CampaignsHelper 
    def campaign_events 
    return (@campaign.calls + @campaign.emails + @campaign.letters).sort{|a,b| a.days <=> b.days} 
    end 
end 

Je veux être en mesure de cliquer sur la valeur numérique pour Jours en regardant la vue/campagne/spectacle et éditer la valeur pour :days (dans ce cas, affiché comme campaign_event.days

Répondre

0

Je ne suis pas vraiment sûr à ce sujet, mais je vais essayer de le faire lp ... Je crois que quelque chose comme ce qui suit travailler pour vous:

# calls controller 
in_place_edit_for :call, :days 

# emails controller 
in_place_edit_for :email, :days 

# letters controller 
in_place_edit_for :letter, :days 

# campaign view 
<% @campaign_events = campaign_events %> 
<% @campaign_events.each do |campaign_event| %> 
    <% controller_name = campaign_event.class.name.tableize %> 
    <% model_name = controller_name.singularize %> 
    <p> 
     <%= link_to campaign_event.title, 
     send("#{model_name}_path", campaign_event) %> 

     <span class='model_name'>(<%= model_name.capitalize %>)</span> 

     <%= in_place_editor_field model_name, :days, {}, 
     :url => { 
      :controller => controller_name, 
      :action => 'set_#{model_name}_title', 
      :id => campaign_event.id} %> Days 
    </p> 
<% end %> 

Il y a somethings Je ne sais pas exactement comment faire:

1) in_place_editor_field model_name
Je crois que cela ne fonctionnera pas , mais je ne sais pas comment passer le model_name.

2) :action => 'set_#{controller_name}_title'
Je ne sais pas à ce sujet aussi. Ça n'a pas l'air juste. Quoi qu'il en soit, j'espère que ça vous aide ... et pardonnez-moi si c'est complètement stupide.

+0

merci pour l'effort, ce n'est pas tout à fait là ... jouer avec certaines des idées, cependant .... – Angela