2017-02-13 21 views
0

Когда я создаю новое объявление (объявление нового продукта) в своем приложении rails 5, я выбираю категорию через раскрывающееся меню, например, электронику, улучшение дома и т. Д. Если после создания элемента я возвращаюсь и редактирую его, у меня есть чтобы снова выбрать категорию, иначе она больше не будет иметь категорию. Как я могу сказать, чтобы категория была либо запомнилась, либо была заполнена, когда я перехожу к редактированию? Наверное, легко для не-нуба ... спасибо!При редактировании сообщения/продукта, как его получить, чтобы запомнить категорию (i/o мне нужно переустановить его)?

Это поле ввода категория по форме:

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


Я не знаю, что еще я должен опубликовать, так вот код категории контроллер:

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 

Таблица продуктов в БД:

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" 

конец

ответ

0

Будьте честным. Вы можете просто использовать обычные действия контроллера леса. Все, что вам нужно, чтобы убедиться, что ваш продукт имеет столбец DB для category_id и имеет эквивалентные ассоциации в ваших моделях, например.

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

чем в вашем products_controller.rb добавить category_id к params и когда он успешно сохранен он будет отображаться в вашем редактировании, а также в ваших взглядах шоу. Для более подробной информации проверьте DOCS на ассоциации R-O-R. Если ваш продукт должен иметь более одной категории, вы можете выбрать другой тип ассоциации. Вот ссылка: http://guides.rubyonrails.org/association_basics.html

+0

у меня есть, в category.rb: 'has_many: ' продуктов и в product.rb, у меня есть 'belongs_to: category' Ты говоришь, что нужно изменить те, что вы «Рекомендовать или должны ли это быть прекрасными? – Nick

+0

Полностью штраф, у вас также есть идентификатор в БД? например. category_id в таблице продуктов? –

+0

Да (я вставил таблицу продуктов в исходный вопрос) – Nick