2013-02-27 3 views
0

Je construis une base de données de recettes de cuisine dans Rails, et j'essaie de créer une forme pratique pour ajouter des ingrédients en utilisant Jquery.Rails/JQuery best practice

Mes associations:

class Recipe < ActiveRecord::Base 
    has_many :recipe_ingredients 
    has_many :ingredients, :through => :recipe_ingredients 

    accepts_nested_attributes_for :recipe_ingredients 
end 

class Ingredient < ActiveRecord::Base 
end 

class RecipeIngredient < ActiveRecord::Base 
    belongs_to :recipe 
    belongs_to :ingredient 
end 

Ma forme de recette ressemble à ceci (simplifié):

<%= simple_form_form(@recipe) do |f| %> 
    <div class="form-inputs"> 
    <%= f.input :name %> 
    <fieldset><legend>Ingredients</legend> 
     <table class="table"> 
     <% @recipe.recipe_ingredients.each do |recipe_ingredient| %> 
      <tr> 
      <%= f.fields_for :recipe_ingredients, recipe_ingredient do |dif| %> 
       <td><%= dif.text_field :ingredient %></td> 
       <td><%= dif.text_field :amount %></td> 
      <% end %> 
      </tr> 
     <% end %> 
     </table> 
     <div class="btn-group"> 
     <a href="#" class="btn btn-primary">Add New Ingredient</a> 
     </div> 
    </fieldset> 
    </div> 
<% end %> 

Deux questions:

  1. Mon bloc .each semblent corrects pour la les associations? Quelle est la meilleure façon d'ajouter une nouvelle ligne à cette table côté client de sorte que l'assistant de formulaire reconnaît la nouvelle ligne et crée l'insertion db appropriée? Je ne suis pas très clair sur la façon dont la magie de Rails fonctionne en termes de création d'un tableau d'objets comme ça.

+0

Voulez-vous créer des ingrédients en créant une recette ou ajouter les ingrédients existants à la recette? –

+1

@SybariteManoj tu as raison, ça fait toute une différence. En ce qui concerne la question # 2, juste un indice: [attributs imbriqués] (http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html) –

+0

@m_x oui, s'il veut ajouter de nouveaux ingrédients alors nested_attributes sont Mais dans ce cas, il n'y a pas besoin d'association «many-many» car les ingrédients seront toujours créés. Mais s'il veut ajouter les ingrédients existants, alors 'ingredient_ids' peut être utilisé. Et dans le dernier cas où il veut les deux alors il pourrait avoir besoin d'utiliser la combinaison des approches précédentes. :) –

Répondre

1

On dirait que Ryan Bate de nested_form est le chemin à parcourir, il supporte simple_form aussi

Utilisation de base:

<%= simple_nested_form_for @recipe do |f| %>

Alors où vous voulez que votre "Ajouter un ingrédient" lien à afficher:

<%= f.link_to_add "Add new ingredient", :recipe_ingredients %>

La gemme elle-même a une bonne documentation, vérifiez également les pages Wiki.