Модель Rails HABTM на heroku показывает «model_id», «name» и «timestamp» вместо просто «name» - PullRequest
0 голосов
/ 03 декабря 2011

Это должно быть довольно просто, но я просто не могу найти способ.

У меня есть 2 модели с отношением HABTM.

Trip.rb

    has_and_belongs_to_many :categories 

Category.rb

    has_and_belongs_to_many :trips

Trip index.html.erb

    <%= trip.categories %> 

все нормально на моей локальной машине - я вижу только название категории.

Но при развертывании на героку вместо названия категории я вижу

 [#<Category id: 1, name: "Surfing", created_at: "2011-10-20 12:28:57", updated_at: "2011-10-20 12:28:57">] 

Кто-нибудь знает, как это исправить? Большое спасибо!

1 Ответ

2 голосов
/ 03 декабря 2011

Я не уверен, почему вы видите name локально, но то, что вы видите на Heroku, является результатом неявного вызова to_s для ассоциации trip.categories, которая является массивом записей категорий.

# You could define the `to_s` of Category to return the name.
class Category
  def to_s
    name
  end
end

# or define a method to return a mapping of the category names:
class Trip
  # via an association extension
  has_and_belongs_to_many :categories do
    def names
      map(&:name)
    end
  end

  # or a simple instance method
  def category_names
    categories.map(&:name)
  end
end

Trip.first.categories.names #=> [cat1, cat2]
Trip.first.category_names   #=> [cat1, cat2]

Но ваш текущий шаблон по-прежнему будет выводить Array строк в вывод, например:

["category1", "category2", "category3"]

То, что вы, вероятно, хотите, больше похоже на:

<%= trip.categories.map(&:name).to_sentence %>

Что может привести к: "category1, category2 и category3" или некоторым другим.

...