2017-02-13 2 views
0

Lorsque je crée une nouvelle annonce (nouvelle publication) dans l'application my rails 5, je sélectionne une catégorie dans le menu déroulant, par exemple l'électronique, l'amélioration de l'habitat, etc. Si après avoir créé un article, je l'édite, pour sélectionner à nouveau une catégorie, sinon elle n'aura plus de catégorie. Comment puis-je dire à la catégorie soit être rappelé ou être pré-rempli quand je vais modifier? Probablement facile pour un non-noob ... merci!Lors de la modification d'une publication/d'un produit, comment puis-je me souvenir de la catégorie (est-ce que je dois la resélectionner)?

C'est le champ de saisie de la catégorie sur le formulaire:

<div class="field"> 
<%= f.label :category %> 
<%= select_tag(:category_id, options_for_select(Category.all.map{|c| [ c.name, c.id]}), :prompt => "Select one!") %> 


Je ne sais pas ce que je devrais poster, voici donc les catégories code du contrôleur:

class CategoriesController < ApplicationController 
before_action :set_category, only: [:show, :edit, :update, :destroy] 

def index 
@categories = Category.all 
end 

def show 
end 

def new 
@category = Category.new 
end 

def edit 
end 

def create 
@category = Category.new(category_params) 

respond_to do |format| 
if @category.save 
format.html { redirect_to @category, notice: 'Category was  successfully created.' }  
else 
    format.html { render :new } 
    end 
end 
end 

def update 
respond_to do |format| 
    if @category.update(category_params) 
    format.html { redirect_to @category, notice: 'Category was successfully updated.' } 
    else 
    format.html { render :edit } 
    end 
end 
end 

def destroy 
@category.destroy 
respond_to do |format| 
    format.html { redirect_to categories_url, notice: 'Category was successfully destroyed.' } 
end 
end 

private 
@category = Category.find(params[:id]) 
end 

def category_params 
    params.require(:category).permit(:name, :desc) 
end 
end 

Tableau des produits dans DB:

create_table "products", force: :cascade do |t| 
t.string "name" 
t.text  "brief" 
t.text  "description" 
t.string "buylink" 
t.string "verdict" 
t.string "category_id" 
t.datetime "created_at", null: false 
t.datetime "updated_at", null: false 
t.string "image" 
t.string "youtube" 
t.integer "user_id" 
t.string "goodverdict" 

fin

Répondre

0

Pour être honnête. Vous pouvez simplement utiliser les actions habituelles du contrôleur d'échafaudage. Tout ce dont vous avez besoin est de vérifier que votre produit a une colonne DB pour category_id et que les associations correspondantes sont présentes dans vos modèles, par ex.

product.rb 
    has_one :category 
category.rb 
    belongs_to :product 

Than dans votre products_controller.rb ajouter category_id au params et quand il est enregistré avec succès, il sera affiché dans votre édition, ainsi que dans votre point de vue du spectacle. Pour plus d'informations détaillées, consultez les associations DOCS sur R-O-R. Si votre produit doit comporter plusieurs catégories, vous pouvez choisir un type d'association différent. Voici le lien: http://guides.rubyonrails.org/association_basics.html

+0

je, en category.rb: 'has_many: products' et product.rb, je' belongs_to: category' Voulez-vous dire que je dois changer ceux que vous Recommandez ou devrait ceux qui ont été bien? – Nick

+0

totalement bien, avez-vous aussi un ID dans la DB? par exemple. category_id dans la table des produits? –

+0

Oui (j'ai collé la table des produits dans la question d'origine) – Nick