Ошибка «DataObjects :: IntegrityError (ОШИБКА: нулевое значение в столбце нарушает ненулевое ограничение» в направляющих 3 - PullRequest
1 голос
/ 16 июня 2011

В моей модели у меня есть

    class Alias
  include DataMapper::Resource


  belongs_to :user


  property :id, String, :key => true, :required => true, :unique => true

  validates_format_of :id, :with => /[0-9a-z\-]/i

end

В моем контроллере:

def new
   @new_alias = @owner.aliases.new()
end
    def create 
         @owner = current_user
         @alias = @owner.aliases.create(params[:alias])
end

И на мой взгляд

<%= form_for @new_alias, :url => {:controller => "aliases", :action=>"create"} do |f| %> 
    <%= f.text_field :id, :placeholder => "Account name" %></br>
    <%= f.submit :value => "Create" %>
 <% end %>

Для меня это выглядит preatty нормальным, но когда я пытаюсь сохранить новый псевдоним, это приводит к:

ERROR:  null value in column "alias_id" violates not-null constraint

Обработка AliasesController # create как параметры HTML: {"utf8" =>"✓", "authenticity_token" => "/ token =", "alias" => {"id" => "IDNAME"}, "commit" => "Create"} ~ SQL (0.632ms) SELECT "id", "encrypted_password", "remember_created_at", "reset_password_token", "reset_password_sent_at", "failed_attempts", "unlock_token", "locked_at", "sign_in_count", "current_sign_in_at", "last_sign_in_at", "current_sign_in_ip", "last_sign_in_ip", "имя пользователя "," электронная почта "," имя "," страна "ОТ" пользователей "ГДЕ" id "ВНУТРИ (2) ПРЕДЕЛ 1 ~
SQL (0,491мс) ВЫБРАТЬ" id "ИЗ" псевдонимы "ГДЕ" id "=«IDNAME» ORDER BY «id» LIMIT 1 Завершено за 11мс ~ SQL (0,531мс) INSERT INTO «aliases» («id», «user_id») VALUES («IDNAME», 2) ~ ОШИБКА: нулевое значение в столбце «alias_id"нарушает не-нольограничение (код: 33575106, состояние sql: 23502, запрос: INSERT INTO "aliases" ("id", "user_id") VALUES ('IDNAME', 2), uri: postgres: name @ localhost: 5432postgres? adapter = postgres & host =localhost & port = 5432 & username = name & password = pass & database = postgres & path = postgres & schema_search_path = public & encoding = utf8 & template = template0)

DataObjects :: IntegrityError (ОШИБКА: нулевое значение в столбце «alias_id * ограничение» нарушает условие not-null *): ограничение not-null *controllers / aliases_controller.rb: 5: in `create '

В чем может быть проблема?Я использую rails3, postgres и datamapper.

Ответы [ 3 ]

2 голосов
/ 16 июня 2011

Похоже, у вас есть поля в вашей базе данных, которые не определены в вашей модели, и что некоторые из этих полей имеют ограничения, не равные NULL. Поскольку datamapper записывает только те поля, о которых он знает (в данном случае :id), он не указывает значения для каких-либо дополнительных полей, которые могут существовать в таблице. Поскольку для неопределенных полей требуются значения, PgSQL выдает ошибку.

Либо удалите ненулевые ограничения, либо добавьте эти поля в DataMapper со значениями :default.

0 голосов
/ 16 июля 2014

У меня была такая же проблема с картографом данных. Вот что я сделал, чтобы это исправить:

В классе Alias ​​ добавьте дополнительную строку следующим образом:

property :user_id, Integer

Эта строка определяет внешний ключ.

0 голосов
/ 16 июня 2011

Не знаком с внутренними компонентами rails, но определение вашего столбца должно быть таким, чтобы он допускал нулевые значения.

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