Форум программистов, компьютерный форум, киберфорум
Ruby on Rails
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
0 / 0 / 1
Регистрация: 14.09.2014
Сообщений: 97

Доступ к параметру модели через связь many-to-many

10.10.2015, 01:25. Показов 1434. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, в общем, вопрос такой: у меня есть 2 модели (Товар и категория) между ними промежуточная таблица item_categories с параметрами category_id и item_id. Скажите как мне присвоить моему товару category_id? у меня есть форма создания товара:
Rails
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  <%= form_for(@item) do |f| %>
 
    <%= f.label :name %>
    <%= f.text_field :name %>
 
    <%= f.label :avatar %>
    <%= f.text_field :avatar %>
 
    <%= f.label :description %>
    <%= f.text_field :description %>
 
    <%=f.label :parent_category %>
    <%= f.select(:id, options_from_collection_for_select(Category.all, :id, :name),
                 {include_blank: 'None'}, {:class => 'form-control'}) %>
 
    <%= f.submit 'Create new item!', class: "btn btn-large btn-primary" %>
<% end %>
и функция create:
Rails
1
2
3
4
5
6
7
8
 def create
    @item = Item.new(item_params)
    if @item.save
      redirect_to @item
    else
      render '/'
    end
  end
как мне в создании еще и присвоить ему category_id, через который он связывается с конкретной категорией?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.10.2015, 01:25
Ответы с готовыми решениями:

Доступ к параметру модели из javascript
Всем привет Необходимо получить доступ к параметрам объекта модели из кода javascript Пытался таким образом: &lt;script...

Обеспечить доступ к параметру метода из других методов
Передается параметр nn public Oplata(int nn) { if (nn == 0) { .......... ...

Описать процедуру maxmin (x, y) присваивает параметру х большее из вещественных чисел x и y, а параметру у -- меньшее
Процедура maxmin (x, y) присваивает параметру х большее из вещественных чисел x и y, а параметру у -- меньшее. Описать данную процедуру и...

8
435 / 246 / 43
Регистрация: 05.08.2013
Сообщений: 1,670
10.10.2015, 07:30
ищите нужную категорию, к примеру в переменную @category, затем @item.categories << @category
0
the hardway first
Эксперт JS
 Аватар для j2FunOnly
2475 / 1847 / 910
Регистрация: 05.06.2015
Сообщений: 3,610
10.10.2015, 12:37
Только не <<, а = иначе старые связи не удалятся из промежуточной таблицы :items_categories
и здесь
<%= f.select(:id, options_from_collection_for_select(Categ ory.all, :id, :name, @item.categories.map(&:id)),
{include_blank: 'None'}, {:class => 'form-control'}) %>
Чтобы при редактировании сразу выбирались нужные option в select

Добавлено через 8 минут
и в обеих моделях
Rails
1
2
3
4
5
has_many :products_categories, dependent: :destroy
has_many :categories, through: :products_categories
 
has_many :products_categories, dependent: :destroy
has_many :products, through: :products_categories
1
0 / 0 / 1
Регистрация: 14.09.2014
Сообщений: 97
10.10.2015, 14:47  [ТС]
j2FunOnly, о как мне найти нужную категорию, которую я выбрал в селекте?
Rails
1
2
3
4
5
6
7
8
9
10
 def create
    @category = Category.find(params[:id])
    @item = Item.new(item_params)
    @item.categories = @category
    if @item.save
      redirect_to @item
    else
      render '/'
    end
  end
я писал так, но не работает.. извиняюсь за, возможно, глупые вопросы, просто плохо разбираюсь в связях
0
the hardway first
Эксперт JS
 Аватар для j2FunOnly
2475 / 1847 / 910
Регистрация: 05.06.2015
Сообщений: 3,610
10.10.2015, 15:01
Покажите модели.
Rails
1
2
3
4
5
6
7
<%= f.select(:categories,
             options_from_collection_for_select(Category.all,
                                                :id,
                                                :name,
                                                @item.categories.map(&:id)),
             {include_blank: 'None'},
             {class: 'form-control', size: 5, multiple: true}) %>
В Product#create
Rails
1
2
3
4
@product.new(product.params)
@product.categories = Category.where(id: params[:product][:categories])
if @product.save
...
Добавлено через 6 минут
product поменяйте на что у вас там... item?
1
0 / 0 / 1
Регистрация: 14.09.2014
Сообщений: 97
10.10.2015, 15:07  [ТС]
j2FunOnly, модель итем:
Rails
1
2
3
4
5
6
7
class Item < ActiveRecord::Base
  mount_uploader :avatar, AvatarUploader
 
  has_many :item_categories, dependent: :destroy
  has_many :categories, through: :item_categories
 
end
Модель category:
Rails
1
2
3
4
5
6
class Category < ActiveRecord::Base
 
    has_many :item_categories, dependent: :destroy
    has_many :items, through: :item_categories
 
end
Промежуточная модель:
Rails
1
2
3
4
class ItemCategory < ActiveRecord::Base
  belongs_to :item
  belongs_to :category
end
ну если что, вот ссылка в гитхабе: https://github.com/KoKoCaptain/catalog_project
0
10.10.2015, 15:27

Не по теме:

Цитата Сообщение от Michel Посмотреть сообщение
ну если что, вот ссылка в гитхабе
Мне кажется вы прошли мимо всё тестирование по туториалу от Хартла. Очень зря.
У него кстати новая редакция вышла, рекомендую к ознакомлению

0
0 / 0 / 1
Регистрация: 14.09.2014
Сообщений: 97
10.10.2015, 19:26  [ТС]
j2FunOnly, Да, по Хартлу. С тестированием знаком, но в этом проекте не реализовывал

Добавлено через 3 часа 45 минут
j2FunOnly, можно еще один вопрос.. как в view вывести категории в которых состоит итем?
например итем Ноутбук, и вывести категорию Компьютеры?
Rails
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  <% @items.each do |item| %>
      <li>
        <%= item.name %>
        <%= item.description %>
        <p> Category: </p>
            <% @categories.each do |category| %>
            <% if item[:category_id] == category.id   %>
                <%= category.name %>
            <% end %>
        <% end %>
        <% if item[:category_id].nil? %>
            <p> This item doesn't have category. </p>
        <% end %>
      </li>
      </br>
  <% end %>
0
the hardway first
Эксперт JS
 Аватар для j2FunOnly
2475 / 1847 / 910
Регистрация: 05.06.2015
Сообщений: 3,610
10.10.2015, 22:16
Лучший ответ Сообщение было отмечено Michel как решение

Решение

Например как-нибудь так
В app/controllers/items_controller.rb3
Rails
1
2
3
4
5
...
def index
  @items = Item.includes(:categories).all
end
...
Читайте подробнее: 13 Eager Loading Associations

Rails
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<% @items.each do |item| %>
  <li>
    <%= item.name %>&nbsp;
    <%= item.description %><br>
    <strong> Category: </strong>
    <% if item.categories.any? %>
      <p>
        <% item.categories.each do |category| %>
          <%= link_to category.name, category_path(category) %>&nbsp;
        <% end %>
      </p>
    <% else %>
      <p> This item doesn't have category. </p>
    <% end %>
  </li>
<% end %>
Добавлено через 4 минуты
Почитайте про haml или slim. Там делов-то на полчаса.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.10.2015, 22:16
Помогаю со студенческими работами здесь

Как на ER модели обозначать полиморфную связь
Имеется полиморфная связь, например: comment_id | parent_id | morph | comment_content | author ...

Связь модели с моделью User Django
Подскажите пожалуйста, сделал проект админки, создал свою модель: class NetworkChange(models.Model): &quot;&quot;&quot; ...

Присвоение параметру запроса значения через VBA
Здравствуйте! Помогите пожалуйста, как написать код, присваивающий параметру запроса на выборку новое значение. Добавлено через 30...

В чем отличие схемы модели данных от диаграммы сущность-связь
Все никак не могу понять отличие модели данных от ER-диаграммы. Поясните мне пожалуйста, а то везде все время пишут по разному, и кому...

Доступ к модели из контроллера
Здравствуйте. Создаю компонент. Пытаюсь в контроллере получить объект модели так: $model= $this-&gt;getModel('Import');Import -...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru