В Rails как отобразить только значение элемента хеша в массиве? - PullRequest
0 голосов
/ 28 марта 2012

Я новичок в ruby ​​/ rails и пытаюсь создать простое приложение Projects / Tags, где Projects и Tags связаны как has_and_belongs_to_many друг с другом. В основном это простой список проектов, с которыми связаны теги, и эти теги, в свою очередь, могут повторно использоваться несколькими проектами.

Я загружаю теги в такие проекты:

my_project = Project.create(:name => "My Project")
my_tag = Tag.create(:content => "My Tag")
my_project.tags << my_tag

Все выглядит хорошо, пока я не попытаюсь загрузить информацию в мой просмотр. У меня есть список проектов, каждый из которых имеет небольшую таблицу ниже со списком связанных тегов:

<table>
 <% @projects.each do |project| %>
   <table>
     <tr>
       <td width="300"><%= project.name %></td>
       <td width="100"><%= link_to 'Edit project', edit_project_path(project) %></td>
       <td width="100"><%= link_to 'Nuke project', project, :confirm => 'Are you sure?', :method => :delete %></td>
     </tr>
   </table>
   <table>
     <tr>
       <td><%= project.tags %></td>
     </tr>
   </table>
 <% end %>
</table>

Вывод просмотра, который я получаю:

[1] My Project               Edit Project      Nuke Project
[2] [#<Tag id: 1, content: "My Tag", created_at: "2012-03-27 19:27:26", updated_at: "2012-03-27 19:27:26">, #<Tag id: 2, content: "My Other Tag", created_at: "2012-03-27 19:41:04", updated_at: "2012-03-27 19:41:04">]

В строке [2] Как мне отображать только значения: content, а не весь хэш? Кроме того - это как я должен ассоциировать теги с проектами?

Было бы здорово, если бы кто-нибудь мог указать мне правильное направление. Очень ценится!

Спасибо! Jason

Ответы [ 2 ]

2 голосов
/ 28 марта 2012

Если вы используете Rails 3.2, вы можете использовать pluck метод для извлечения только контента

<%= project.tags.pluck(:content).join(",") %>
2 голосов
/ 28 марта 2012

Ну project.tags вернет массив, поэтому вам нужно перебрать каждый элемент и отобразить его. Например, попробуйте:

project.tags.map {|tag| tag.content}.to_sentence

Карта проходит по каждому тегу, и мы отображаем содержимое каждого тега, наконец выводя его в предложение.

Есть множество других способов сделать это. Посмотрите методы массива для получения дополнительной информации.

Что касается другого вопроса, has_and_belongs_to_many подходит, но для большей гибкости попробуйте использовать has_many: through, как объяснено здесь . И здесь является причиной этого.

...