Как правильно добавить категории в Ruby on Rails?

Здравствуйте как правильно добавить категории к проектам

Мне нужно чтобы при созданий проекта я мог выбрать категорию, а потом сортировать проекты по категориям

на данный момент я сделал так:

class CreateCategories < ActiveRecord::Migration
  def change
    create_table :categories do |t|
      t.string :name
      t.integer :user_id

      t.timestamps
    end
    add_index :categories, :user_id
  end
end


class CreateProjects < ActiveRecord::Migration
  def change
    create_table :projects do |t|
      t.integer :user_id
      t.string :title
      t.text :description
      t.belongs_to :category

      t.timestamps
    end
    add_index :projects, [:user_id, :category_id, :created_at]
  end
end


class Category < ActiveRecord::Base
  attr_accessible :name

  has_many :products

  belongs_to :user

  validates :user_id, presence: true
end


class Project < ActiveRecord::Base
  attr_accessible :description, :title, :category_id

  belongs_to :user, touch: true  
  belongs_to :category

  validates :user_id, presence: true
  validates :category_id, presence: true
end


<%= form_for(@project) do |f| %>
  <fieldset>
    <%= f.label :Title %>
    <%= f.text_field :title, class: 'span12' %>

    <%= f.label :Description %>
    <%= f.text_area :description, class: 'span12' %>


    <%= f.label :category_id %>
    <%= f.collection_select :category_id, Category.order(:name), :id, :name, class: 'span12' %>

    <%= f.submit 'Save', disable_with: '...', class: 'btn btn-default' %>
  </fieldset>
<% end %>


На сколько это правильно и как сделать сортировку проектов по категориям?
Буду очень признателен если поможете
  • Вопрос задан
  • 3463 просмотра
Решения вопроса 1
@vanderv
Ruby on Rails
Вполне нормально.
Для сортировки добавьте форму(в индекс) с селектом:
<%= f.collection_select :category_id, Category.order(:name), :id, :name, class: 'span12' %>

В контролеое делайте выборку:
Project.where(:category_id => params[:category_id])

или
Category.includes(:projects).find(params[:category_id])
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@medium3001
Подскажите, сделал почти точно по такой схеме, категория выбирается, но беда с отображением выбранной категории в посте. в базе данных category_id стоит NULL. будто там ничего не сохраняется.
class CreateArticles < ActiveRecord::Migration
  def change
    create_table :articles do |t|
      t.string :title
      t.text :text
      t.belongs_to :category, index: true
      t.timestamps
    end

    create_table :categories do |t|
      t.string :name
      t.timestamps
    end
  end
end

class Article < ActiveRecord::Base
	has_many :comments, dependent: :destroy
	belongs_to :category
	validates :title, presence: true,
                    length: { minimum: 5 }

end

class Category < ActiveRecord::Base
	has_many :articles
end

в index файле
<td><%= article.title %></td>
			<td><%= article.text %></td>
			<td><%= article.category_id %></td>

category_id не показывает
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы