国家has_many频道选择复选框

时间:2011-01-29 18:26:50

标签: ruby-on-rails

我觉得这应该很简单,但我遇到了让它运转的问题。我尝试过HABTM,但我认为这不是我需要的。

'国家'has_many'频道'和'频道'属于'国家'。基本上我想在频道表单上列出带有复选框的国家/地区,并在country_id中保存一系列国家/地区。

以下是观点:

<%= 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 个答案:

答案 0 :(得分:2)

如果您想要在频道表的字符串字段中存储国家/地区ID的列表,我就是这样做的:

(我不是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

答案 1 :(得分:0)

你说:

  

保存一系列国家/地区   COUNTRY_ID

在频道上指定country_id时,表示该频道属于一个国家/地区。这听起来更像是你想让一个频道有很多国家......也许这是你想要的M:M关系?无论哪种方式,你都不能“保存数组”到country_id或模型上的任何字段......至少不是你想要完成的事情。

此外,belongs_to :countries应为belongs_to :country