2010-02-13 1 views
0

(Rails newbie)Validations Rails. A besoin de données provenant d'autres choses. Formes multiples N'étant pas DRY

Bonjour!

Je me sens comme je réutilisez beaucoup de mon code et je pense qu'il doit y avoir une meilleure façon de le faire ... (Je suis sûr qu'il est ...)

Ce que j'est une page Paramètres, dans laquelle vous pouvez créer des catégories et des procédures (appartenant à une catégorie).

Index Action Paramètres:

def categories_and_procedures 
    @prefs = @current_practice.preferences 

    @category = @current_practice.categories.build 
    @categories = @current_practice.categories.all 
    @procedure = @current_practice.procedures.build 
end 

Dans la vue est une liste avec toutes les catégories actuelles et un formulaire pour créer un nouveau. Dans le modèle Category est une validation (validates_uniqueness_of: name).

action create:

def create_category 
    @category = @current_practice.categories.build(params[:category]) 
    if @category.save 
     flash[:notice] = "New category created: <i>#{@category.name}</i>" 
     redirect_to :action => "categories_and_procedures" 
    else 
     ##Duplicate code!!!!!! 
     @prefs = @current_practice.preferences 

     @category = @current_practice.categories.build 
     @categories = @current_practice.categories.all 
     @procedure = @current_practice.procedures.build 
     ##Duplicate code!!!!!! 
     render :action => "categories_and_procedures" 
    end 
end 

Est-il possible que je peux passer à une fonction que je peux appeler? Assistant? Filtres? Je ne sais pas.

Merci!

Répondre

1

Il suffit d'écrire:

def create_category 
    @category = @current_practice.categories.build(params[:category]) 
    if @category.save 
    flash[:notice] = "New category created: <i>#{@category.name}</i>" 
    redirect_to :action => "categories_and_procedures" 
    else 
    categories_and_procedures 
    render :action => "categories_and_procedures" 
    end 
end 

Il sera mieux si vous allez ajouter une méthode d'installation:

def setup_object 
    @prefs = @current_practice.preferences 

    @category = @current_practice.categories.build 
    @categories = @current_practice.categories.all 
    @procedure = @current_practice.procedures.build 
end 

et l'appeler de categories_and_procedures et de create_category.

+0

Ah merci! Je l'ai essayé et une fois que j'ai pressé soumettre rien ne se passe (quand je m'attendais à des erreurs). Je pense que la @category = @ current_practice.categories.build remplaçait les erreurs. Mais quand j'utilise une méthode set_up, je peux juste laisser cela et le mettre dans les "categories_and_procedures" séparément. Merci encore! – Macint

Questions connexes