В рельсах, как работает самогенерируемый первичный ключ? - PullRequest
0 голосов
/ 12 марта 2020

В приложении / представлениях я хочу показать некоторые атрибуты курсов на своей веб-странице, и я закодировал их, как показано ниже:

  <% @courses.each do |course| %>
    <tr>
      <td><%= course.code %></td>
      <td><%= course.name %></td>
      <td><%= course.description %></td>
      <td><%= link_to 'Drop', "/drop/#{course.id}", class: 'btn btn-primary', method: :post %></td>
    </tr>
  <% end %>

Дело в том, что в третьем ряду, независимо от того, что я использую, курс. code 'или' course.id ', на моей веб-странице всегда будет отображаться CODE курса, но не самогенерируемый' id '. Я установил первичный ключ таблицы 'course' с помощью:

self.primary_key = "code"

, но я не удалил самогенерируемый первичный ключ 'id'. Так почему я все еще могу использовать 'course.id', чтобы показать КОД курса?

1 Ответ

0 голосов
/ 18 марта 2020

когда вы делаете self.primary_key = "code", он вызывает метод primary_key= и устанавливает @primary_key

def primary_key=(value)
  @primary_key        = value && -value.to_s
  @quoted_primary_key = nil
  @attributes_builder = nil
end

исходный код

при вызове course.id он использует @primary_key в качестве имени атрибута

# Returns the primary key column's value.
def id
  _read_attribute(@primary_key)
end

исходный код

, поэтому, когда вы делаете course.id, его вызовы _read_attribute с 'code' как аргумент, который будет возвращать значение для code

, чтобы получить фактический идентификатор, конвертировать курс в hash

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