我的模型有以下(相关)声明:
class Campaign < ActiveRecord::Base
has_many :placements, dependent: :destroy
has_many :clients, dependent: :destroy
accepts_nested_attributes_for :clients, allow_destroy: true
accepts_nested_attributes_for :placements, allow_destroy: true
end
class Placement < ActiveRecord::Base
has_one :client, through: :campaign
belongs_to :campaign
validates_presence_of :hashtags_instagram, :hashtags_twitter, :sms, :url, :channel
end
class Client < ActiveRecord::Base
belongs_to :campaign
belongs_to :placement
validates_presence_of :client_name
end
如此有效,广告系列有很多展示位置和客户。展示位置只有一个客户端,并且只与一个广告系列相关联(或者至少应该是,我仍然不确定我是否正确地执行了此操作)。
因此,在我的展示位置表单中,我希望它显示属于展示位置广告系列(并非所有广告系列)的所有客户的下拉菜单。如果是新展示位置,则应显示&#34;请选择或类似&#34;否则,它应显示属于该展示位置的客户。
我似乎无法获得:prompt选项。它实际上从未显示Please Select,只是列表中的第一个客户端。我试图用它来使它工作:
奇怪的是,如果我将提示更改为include_blank,它实际上会显示空白项目(尽管它仍然会选择列表中的第一个客户端,而不是空白项目。)
当我尝试一些东西时,我尝试了代码:
= f.collection_select(:placement_id, @placement.client.all.to_a, :id, :client_name, {:prompt => true}, class: "newdropdown-menu", id: "newdropdown")
收到错误消息:
Could not find the source association(s) :client or :client in model Campaign. Try 'has_many :client, :through => :campaign, :source => <name>'. Is it one of :user, :placements, :clients, or :photo?
如果我更改了集合,请选择阅读:
= f.collection_select(:campaign_id, @placement.campaign.clients.all.to_a, :id, :client_name, {:prompt => true}, class: "newdropdown-menu", id: "newdropdown")
然后它运行,但实际上并不显示提示,只显示列表。
将@placement更改为展示位置似乎没有任何影响(这似乎很奇怪)。
我不想将其更改为has_many,因为展示位置应该只有一个客户端。我该怎么办?我试过搞乱:来源,但它似乎与我的问题无关。
答案 0 :(得分:0)
您需要将html选项放在哈希中:
f.collection_select(:campaign_id, @placement.campaign.clients.all, :id, :client_name, {:prompt => true}, {class: "newdropdown-menu", id: "newdropdown"})
此处提供的文档: http://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/collection_select