我觉得这应该很简单,但我遇到了让它运转的问题。我尝试过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中这样做。
答案 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