def seller_names_and_ids
# We want this to produce a hash of keys (the thing to display) and values (the thing to save,
# in thise case the seller_id integer)
sellers = Seller.all
h = {}
sellers.each do |seller|
thing_to_display = seller.name + " (" + seller.id.to_s + ")"
thing_to_save_in_db = seller.id
h.store(thing_to_display, thing_to_save_in_db)
end
h
end
9条答案
按热度按时间rxztt3cl1#
我想显示一个东西(人类可读),但存储另一个东西(整数id)。
小示例
这里有一个很有用的小例子:
{cat: 5, dog: 3}
将显示“猫”和“狗”,但保存5和3。真实的示例
下面是一个实际的用例,它显示了卖家的名字(人们可以阅读),但是保存了卖家的id(一个整数):
而助手定义为:
yhqotfr82#
您可以查看Rails文档。无论如何,在您的表单中:
正如您所猜测的,您应该在另一个模型
Provider
中预定义电子邮件提供程序,以便从中选择它们。amrnrhlw3#
或用于自定义选项
ql3eal8s4#
在
Contact
控制器中创建集合-正在添加
使用
Provider
模型中by_name
的作用域app/models/provider.rb
,按名称排序然后在视图-
app/views/contacts/_form.html.erb
中使用对于Rails表单,我还强烈建议您考虑像simple_form -https://github.com/plataformatec/simple_form这样的表单构建器,它将完成所有繁重的工作。
yh2wf1be5#
这是一个很长的过程,但是如果你还没有实现,那么你可以用这种方法来创建你的模型。
1)为电子邮件提供商创建新模型:
$ rails g model provider name
2)这将创建一个带有名称字符串和时间戳的模型。它还创建了迁移,我们需要将其添加到模式中:
$ rake db:migrate
3)添加迁移以将提供商ID添加到“联系人:
$ rails g migration AddProviderRefToContacts provider:references
4)仔细检查迁移文件,检查其外观是否正常,然后也进行迁移:
$ rake db:migrate
5)现在我们有了provider_id,不再需要原来的email_provider字符串:
$ rails g migration RemoveEmailProviderFromContacts
6)在迁移文件中,添加如下所示的更改:
7)完成后,迁移更改:
$ rake db:migrate
8)让我们借此机会更新我们的模型:
联系人:
belongs_to :provider
提供程序:
has_many :contacts
9)然后,我们在视图的_form.html.erb部分中设置下拉逻辑:
10)最后,我们需要添加提供者本身。一种方法是使用种子文件:
$ rake db:seed
q5lcpyga6#
<%= f.select :email_provider, ["gmail","yahoo","msn"]%>
ru9i0ody7#
请看这里
轨道标记
上面的代码行将变成HTML代码(HTML标记),请在下面查找
HTML标记
xmjla07d8#
使用has_many关联的Rails下拉列表中的文章和类别:
64jmpszr9#
在您的模型中,
在您的表单中,
options_for_select的第二个参数将选择任何当前的电子邮件提供商。