Ваша проблема, вероятно, именно здесь:
class Mail < ActiveRecord::Base
# ---------^^^^^^^^^^^^^^^^^^
include ActiveModel::Validations
validates :password, :presence => true
attr_accessor :password, :to, :cc, :bcc, :from, :subject, :message
end
Подклассы ActiveRecord::Base
и включение ActiveModel::Validations
немного странно, так как AR уже включает все элементы проверки.Смешивание AR и attr_accessor
является еще одним признаком того, что происходит что-то странное.
В ваших комментариях вы отмечаете, что создали эту модель с:
$ rails g model mail
И она пытается создать базу данныхподдерживаемая модель ActiveRecord, поскольку это почти всегда то, что люди хотят.Вы также можете столкнуться с проблемами из-за того, что Mail
уже используется, поэтому, возможно, вы захотите использовать другое имя.
Если вам нужна модель, представляющая собой временный пакет данных, вы можете сделать это:
class SomeEmail
attr_accessor :password, :to, :cc, :bcc, :from, :subject, :message
end
Возможно, вам здесь не нужны проверки, но вы можете добавить их:
class SomeEmail
include ActiveModel::Validations
validates :password, :presence => true
attr_accessor :password, :to, :cc, :bcc, :from, :subject, :message
end
, но проверки не будут запущены, если вы не вызовете valid?
вручную, поэтомунет особого смысла.
Наконец, простое добавление attr_accessor
не даст вам полезного конструктора, поэтому со всеми вышеперечисленными изменениями это:
@mail = SomeMail.new(params[:mail])
все равно не будет делать то, чтоВы хотите, чтобы ничего в params[:mail]
нигде не сохранялось.Поэтому добавьте реализацию initialize
в свой класс электронной почты и вызов valid?
на свой контроллер.