has_one 表单中的现有数据
Posted
技术标签:
【中文标题】has_one 表单中的现有数据【英文标题】:has_one existing data in form rails 【发布时间】:2016-03-08 08:01:59 【问题描述】:我有两门课
class Movie < ActiveRecord::Base
has_one :rating
end
class Rating < ActiveRecord::Base
end
我已经在评级表中填充了数据。
当我创建电影时,如何将评级表中的数据填充为选择字段?并且在电影保存后创建关联?
这是可能的吗?
任何帮助将不胜感激
【问题讨论】:
您要在选择中填充的评级表的字段是什么? 嗨@Pavan,在这种情况下,名称类似于 R、PG...等 创建新电影时要选择评分表的数据吗? @kajal 我想选择保存在数据库中的评分 【参考方案1】:你可以像这样使用它:
<%= f.select(:rating, Rating.all.collect |u| [u.name], :prompt => 'Select') %>
【讨论】:
【参考方案2】:在你的 Rating 模型中,取一个常数,如果你有 has_many
,你应该在 rating 中有一个 belongs_to
。
class Rating < ActiveRecord::Base
Ratings = Rating.all.pluck(:id,:name)
end
在您的电影表单中,
<%= f.select :rating, Rating::Ratings.map|rating| [ rating[1], rating[0] ] %>
如果没有评分,则取要保存电影评分的字段名称
【讨论】:
【参考方案3】:您应该在 Rating 上添加 belongs_to
关联。
然后以你的形式:
<%=
f.select(:rating_id, Rating.all.map |u| [u.name, u.id], :prompt => 'Select') %>
更新:
belongs_to
是指定外键的关联方。因此,从您的示例中,我发现 Movie
可以被评为 0 次或更多次。 Rating
始终是一个 Movie
。
所以你的模型应该是:
class Movie < ActiveRecord::Base
has_many :ratings
end
class Rating < ActiveRecord::Base
belongs_to :movie
end
【讨论】:
保存电影时出现以下错误Rating(#70108240012820) expected, got String(#70108173494120)
如果我这样做,电影表不应该有 rating_id 吗?以上是关于has_one 表单中的现有数据的主要内容,如果未能解决你的问题,请参考以下文章
rails wicked gem has_one 关联和嵌套形式
如何在Access中使用子表单时编辑现有记录而不创建新记录?