Элегантный способ обработки collection_select в контроллере? - PullRequest
1 голос
/ 02 марта 2010

В настоящее время я несколько застрял, пытаясь найти элегантное решение моей следующей проблемы:

Допустим, у меня есть следующие классы:

class Event < ActiveRecord::Base
  belongs_to :reg_template, :class_name => "EmailTemplate"
  [...]
end

class EmailTemplate < ActiveRecord::Base
  has_many :events
  [...]
end

И представление, которое содержит:

<%= f.collection_select(:reg_template_id, EmailTemplate.all, :id, :name) %>

Каков рекомендуемый способ обработки этого поля формы в контроллере действий?

Наличие отношения 1: 1 между Event и EmailTemplate означает, что Rails не генерирует reg_template_id и reg_template_id = method (как это было бы для отношения 1: n), поэтому попытки прочитать или присвоить это поле завершатся неудачно с

unknown attribute: reg_template_id

при попытке вызвать

Event.update_attributes

Использование

<%= f.collection_select(:reg_template, EmailTemplate.all, :id, :name) %>

вместо этого также не очень помогает, так как потерпит неудачу с:

EmailTemplate(#70070455907700) expected, got String(#70070510199800)

Полагаю, мне не хватает чего-то ужасно очевидного, так как я думаю, что довольно часто обновлять экземпляр модели со ссылкойк другому объекту через collection_select.

1 Ответ

2 голосов
/ 02 марта 2010

Если у вас есть столбец reg_template_id в таблице events, то должен работать следующий код:

<%= f.collection_select(:reg_template_id, EmailTemplate.all, :id, :name) %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...