collection_select не сохраняет выбранную опцию в базе данных - PullRequest
1 голос
/ 16 февраля 2012

У меня есть collection_select в одном из моих представлений, которое правильно создает меню HTML <select>, но при выборе параметра оно не сохраняется в базе данных.В том же виде у меня есть другие поля из той же таблицы БД, и они копят.Вот мои модели:

class TrainingPart < ActiveRecord::Base
  belongs_to :activity
  belongs_to :training  
  accepts_nested_attributes_for :activity, :allow_destroy => true
end

class Activity < ActiveRecord::Base
  has_many :training_parts 
end

Часть:

<div class="part">
  <%= f.label :activity, "Activity" %>
  <%= collection_select :training_part, :activity_id, Activity.all, :id, :name %>
  <%= f.text_field :activity_id %>
  <%= f.text_field :amount %>  
</div> 

Поле amount отлично работает.

РЕДАКТИРОВАТЬ: Iне используйте attr_accessible в любой модели, поэтому все поля во всех таблицах доступны.(ссылка: Определение массового назначения Rails и использование attr_accessible )

Ответы [ 3 ]

1 голос
/ 16 февраля 2012

Мне удалось это сделать.Оказалось, что у меня было 2 ошибки:

1) Мне пришлось удалить <%= f.text_field :activity_id %> из вида, поскольку это было поле, которое я пытался установить с помощью меню выбора.2) Я должен был использовать f.collection_select вместо collection_select

0 голосов
/ 04 марта 2014

Для меня проблема была в том, что я не внес белый список в поле моего контроллера.

Допустим, в вашем меню выбора есть сообщения блога в качестве параметров, поэтому вы можете выбрать, к какому блогу относится комментарий

f.collection_select :post_id, Post.all, :id, :name

Тогда вам нужно разрешить post_id в вашем CommentsController

def update
  # ...
  if @comment.update_attributes(post_params)
  # ...
end

def post_params
  params.require(:comment).permit(:name, :post_id)  # Make sure the field used with your select menu is permitted! 
end
0 голосов
/ 16 февраля 2012

Разрешить массовое присвоение любым атрибутам, которые вы хотите установить из представления:

attr_accessible :activity_id, :amount # ...any others...

«Массовое назначение» означает одновременную установку множества атрибутов с данными из представления, например из форм.Эти атрибуты по умолчанию защищены, чтобы запретить пользователям вводить свои собственные значения (например, admin = true).

Используйте attr_accessible, чтобы объявить, какие из атрибутов вашей модели можно назначать по массе.

Кроме того, поскольку вы принимаете вложенные атрибуты для Activity, вы должны включить :activity_attributes в свой список доступных атрибутов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...