Rails help looping имеет один и относится к ассоциации - PullRequest
0 голосов
/ 05 марта 2011

Это мой контроллер шоу категории:

  def show
    @kategori = Kategori.find(params[:id])
    @konkurrancer = @kategori.konkurrancer

    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @kategori }
    end
  end

Это файл представления категории:

<% @konkurrancer.each do |vind| %>
      <td><%= vind.name %></td>
      <td>4 ud af 5</td>
      <td><%= number_to_currency(vind.vaerdi, :unit => "DKK", :separator => ".", :delimiter => ".", :format => "%n %u", :precision => 0) %></td>
      <td>2 min</td>
      <td>Nyhedsbrev</td>
      <td><%= vind.udtraekkes.strftime("%d %B") %></td>
   </tr>
<% end %>

Моя модель категории:

class Kategori < ActiveRecord::Base
has_one :konkurrancer
end

Моя модель-конкурент:

class Konkurrancer < ActiveRecord::Base
belongs_to :kategori
end

Я хочу показать все konkurrancer, которые связаны с моделью kategori

С моим кодом я получаю следующую ошибку: NoMethodError в Kategoris # show

Показ C: /Rails/konkurranceportalen/app/views/kategoris/show.html.erb, где поднята строка # 12:

неопределенный метод `each 'для" # ": Konkurrancer

1 Ответ

1 голос
/ 05 марта 2011

Проблема в том, что вы пытаетесь перебрать связь has_one. Has_one означает именно это - имеет one , поэтому вы не можете вызывать каждый по этому вопросу, потому что есть только один. Вы можете сделать одну из следующих вещей, чтобы решить проблему в своем коде:

Использовать ассоциацию has_many:

class Kategori < ActiveRecord::Base
  has_many :konkurrancers
end

Используйте ассоциацию has_one и измените ваше представление:

<tr>
  <td><%= @konkurrancer.name %></td>
  <td>4 ud af 5</td>
  <td><%= number_to_currency(@konkurrancer.vaerdi, :unit => "DKK", :separator => ".", :delimiter => ".", :format => "%n %u", :precision => 0) %></td>
  <td>2 min</td>
  <td>Nyhedsbrev</td>
  <td><%= @konkurrancer.udtraekkes.strftime("%d %B") %></td>
</tr>

Какой из них вы используете, зависит от вашей модели данных. Если в Kategori много Konkurrancers, используйте первый пример. Если у Kategori есть один Konkurrancer, используйте второй пример. Оба действительны.

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