Как я могу получить доступ к ассоциациям Active Record в представлении? - PullRequest
0 голосов
/ 12 ноября 2009

Если у меня есть модель, как в следующем примере

class Person < ActiveRecord::Base 
   has_many :moods
end 

 class Mood <ActiveRecord::Base
 end

как мне изменить new.html.erb, позволяющий выбрать настроение при вводе нового персонажа? Нужно ли вручную добавлять внешние ключи в mysql?

Ответы [ 3 ]

4 голосов
/ 12 ноября 2009

Если вы хотите выбрать меню, вам нужен помощник collection_select .

Проверьте Formtastic , он может создать хорошее меню выбора для вашего has_many для вас.

1 голос
/ 13 ноября 2009

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

Когда вы хотите, чтобы у человека было ровно одно настроение за раз, я бы смоделировал его так:

class Person < ActiveRecord::Base 
  belongs_to :mood
end 

class Mood < ActiveRecord::Base
  has_many :people
end

Миграция для создания таблицы сотрудников в базе данных должна включать следующую инструкцию для создания внешнего ключа:

def self.up
  create_table :people do |t|
    ...
    t.references :mood
    ...
  end
end

Если это то, что вы хотите, вы можете использовать команду collection_select, как указано в flyfishr64.

Внутри тега form_for в new.html.erb вы могли бы написать что-то вроде этого:

<% form_for @person do |f| %>
...
<%= f.collection_select :mood_id, Mood.all, :id, :mood_name, :include_blank => "--- Choose your mood ---" %>
...
<% end %>

Надеюсь, это поможет!

Однако, если вы действительно хотите, чтобы у вашего человека было несколько настроений одновременно, это было бы немного сложнее, и я, вероятно, предложил бы использовать has_and_belongs_to_many ассоциацию в обеих моделях.

Если это так, я бы порекомендовал посмотреть этот эпизод Railscast: HABTM Checkboxes. (Извините, вы должны искать ссылку самостоятельно, поскольку мне не разрешено размещать более одной строки. Перейдите на railscast.com и найдите эпизод 17.)

1 голос
/ 13 ноября 2009

Миграции Rails не создают внешние ключи автоматически. Либо ограничение необходимо добавить во время миграции с помощью команды, аналогичной следующей:

execute "alter table moods add constraint fk_moods_persons foreign key (person_id) references persons(id)"

Существуют плагины, которые выполняют эту работу автоматически и упрощают ее работу. Немногие из популярных:

  1. Foreigner
  2. Redhill On Rails Core [www.railslodge.com/plugins/389-redhill-on-rails-core]

А для отображения в представлениях можно использовать помощник collection_select.

Я думаю, что habtm будет лучшей ассоциацией (если у более чем одного человека может быть одинаковое настроение). Или has_many: через это еще лучше.

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