Что я делаю не так с ассоциацией Rails has_many и own_to? - PullRequest
0 голосов
/ 27 января 2012

Я создаю приложение, чтобы регистрировать, когда файлы перемещаются на диск архива, откуда они были перенесены и куда пользователь их переместил.

Это моя архивная модель:

class Archive < ActiveRecord::Base
  attr_accessible :archive_date, :start_dir, :end_dir, :user_id

  #added by chris

  belongs_to :user
end

Это моя модель пользователя:

class User < ActiveRecord::Base
  # new columns need to be added here to be writable through mass assignment
  attr_accessible :username, :email, :password, :password_confirmation, :user_id

  attr_accessor :password
  before_save :prepare_password
  before_save :assign_user_id

  #added by chris
  has_many :archives

  def assign_user_id
    self.user_id = User.maximum('user_id') + 1
  end

end

Это мой взгляд:

<table id="archive_table">
  <tr>
    <th>Archive Date</th>
    <th>Source Directory</th>
    <th>Archive Directory</th>
    <th>Archived By ID</th>
    <th>Archived By Name</th>
  </tr>
  <% for archive in @archives %>
    <tr>
      <td><%= archive.archive_date %></td>
      <td><%= archive.start_dir %></td>
      <td><%= archive.end_dir %></td>
      <td><%= archive.user_id %></td>
      <td><%= archive.username %></td>
      <td><%= link_to "Show", archive %></td>
      <td><%= link_to "Edit", edit_archive_path(archive) %></td>
      <td><%= link_to "Destroy", archive, :confirm => 'Are you sure?', :method => :delete %></td>
    </tr>
  <% end %>
</table>

<p><%= link_to "New Archive", new_archive_path %></p>

Когда я запускаю свой локальный сервер rails через rails s Попробуйте загрузить страницу. Вот что я получаю:

NoMethodError in Archives#index

Showing c:/appname/app/views/archives/index.html.erb where line #21 raised:

undefined method `username' for #<Archive:0x203d750>

Extracted source (around line #21):

18:       <td><%= archive.start_dir %></td>
19:       <td><%= archive.end_dir %></td>
20:       <td><%= archive.user_id %></td>
21:       <td><%= archive.username %></td>
22:       <td><%= link_to "Show", archive %></td>
23:       <td><%= link_to "Edit", edit_archive_path(archive) %></td>
24:       <td><%= link_to "Destroy", archive, :confirm => 'Are you sure?', :method => :delete %></td>

Rails.root: c:
Application Trace | Framework Trace | Full Trace

app/views/archives/index.html.erb:21:in `block in _app_views_archives_index_html_erb__238412483_16592988'
app/views/archives/index.html.erb:15:in `each'
app/views/archives/index.html.erb:15:in `_app_views_archives_index_html_erb__238412483_16592988'

Предполагая, что архивная запись правильно сохранена с пользователями User_ID, как мне заставить мое представление отображать имя пользователя через ассоциацию has_many Proper_to?

Спасибо, что посмотрели на мой вопрос.

1 Ответ

2 голосов
/ 27 января 2012

В архивах есть пользователи, у пользователей есть имена пользователей - я думаю, что вы только на один уровень выше "высокого";использовать:

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