Страна has_many Каналы выбора флажков - PullRequest
2 голосов
/ 29 января 2011

Я чувствую, что это должно быть просто, но у меня проблемы с тем, чтобы заставить его работать. Я пробовал HABTM, но я не думаю, что это то, что мне нужно.

«Страна» имеет_много «Каналы», а «Канал» принадлежит «Стране». По сути, я хочу перечислить страны с флажками в форме каналов и сохранить массив стран в идентификаторе страны.

Вот вид:

<%= f.label :country_id, "Countries" %><br />
<ul style="padding: 0; margin: 0;">
  <% for country in Country.find(:all) %>
    <li style="list-style: none;">
      <%= check_box_tag "channel[country_ids][]", :name => "channel[country_ids][]" %>
      <%= label_tag country.id, country.name %>
    </li>
  <% end %>
</ul>

country.rb

class Country < ActiveRecord::Base
  has_many :channel
  has_many :satellites
  has_many :statistics
  has_many :testimonies
  has_many :videos
  attr_accessible :name, :coords

  def hash
    name.gsub(" ", "_").downcase
  end
end

channel.rb

class Channel < ActiveRecord::Base
  belongs_to :countries
  attr_accessible :name, :logo, :country_id
end

Я собираюсь сделать то же самое со спутниками, статистикой, свидетельствами и видео.

Любая помощь приветствуется. Спасибо!

К вашему сведению, я делаю это в Rails 2.3.8, а не в Rails 3.

Ответы [ 2 ]

2 голосов
/ 04 февраля 2011

Если вы имеете в виду, что вы хотите сохранить список идентификаторов стран в строковом поле в таблице каналов , я бы так и сделал:

(я не уверен на 100%, что это будет работать в Rails 2.3, но должно , возможно, потребуется небольшая настройка)

В виде формы:

<% Country.find(:all).each do |country| %>
  <%= check_box_tag "channel[country_ids][#{country.id}]", country.id, false, :name => "channel[country_ids][]" %><%= label_tag "country[country_ids][#{country.id}]", country.description %>
<% end %>

В модели:

class Channel < ActiveRecord::Base

  before_create :prepare_for_create

  attr_accessible :country_ids


  def prepare_for_create
    self.country_ids = self.country_ids.join(",")
  end
end
0 голосов
/ 04 февраля 2011

Вы говорите:

сохранить массив стран в идентификаторе страны

Когда вы указываете значение country_id на канале, это означает, что канал принадлежит одной стране.Звучит так, будто вы хотите, чтобы у канала было много стран, хотя ... может быть, вы хотите отношения M: M?В любом случае, вы не можете "сохранить массив" в country_id или в любом поле модели ... по крайней мере, не для того, чего вы пытаетесь достичь.

Кроме того, belongs_to :countries должно быть belongs_to :country

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