Rails .save () не хранит идентификатор - PullRequest
0 голосов
/ 10 марта 2011

Я пишу RESTful API в Rails, и когда я создаю объект Label и использую метод .save(), метка должным образом сохраняется в базе данных, но вызов @label.id возвращает ноль.

Оператор puts проверяет, что все правильно, кроме поля id. Я также проверил, что база данных имеет правильные идентификаторы.

Также обратите внимание: это внутри URL-адреса вложенного ресурса: POST /members/:member_id/labels/.

Кто-нибудь испытывал это раньше?

def create
  if params[:member_id] and params[:title]

    # Periods in a username will have been translated to underscores
    member_id = params[:member_id].gsub('_', '.')
    title = params[:title]

    # @member = Member.find(member_id) # No longer in use
    @label = Label.new(:username => member_id, :title => title)

    if @label.save

      puts " *** label: #{@label.inspect}"
      @label.reload

      respond_to do |format|
        format.json { render :json => @label, :status => :created and return }
      end
    else
      respond_with :status => 406, :errors => @label.errors and return
    end

  end

  respond_with :status => 406, :errors => [ :message => "member_id and title parameters must be provided" ] and return
end

К сожалению, я не могу предоставить файл миграции в соответствии с запросом, так как я подключаюсь к существующей базе данных PostgreSQL, изначально просматриваемой через PHP. Однако ниже приведен оператор create table вместе с тем, как выглядит select *.

DROP TABLE student_labels;
CREATE TABLE student_labels (
  id serial not null,
  username text not null,
  title text not null,
  created_at timestamp not null default now(),
  updated_at timestamp not null default now(),
  deleted_at timestamp
);
development=> select * from student_labels;
 id | username |    title     |         created_at         |         updated_at         | deleted_at
----+----------+--------------+----------------------------+----------------------------+------------
  7 | F0003    | Boom         | 2011-03-10 05:49:06.01771  | 2011-03-10 05:49:06.01771  |
  8 | F0003    | Boom         | 2011-03-10 05:49:28.659    | 2011-03-10 05:49:28.659    |
  9 | F0003    | Boom         | 2011-03-10 05:52:03.343815 | 2011-03-10 05:52:03.343815 |
 10 | F0003    | Boom         | 2011-03-10 05:53:07.803489 | 2011-03-10 05:53:07.803489 |

1 Ответ

3 голосов
/ 10 марта 2011

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

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