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 表单中的现有数据的主要内容,如果未能解决你的问题,请参考以下文章

选择表单内的活动管理员 has_one 重复

检查表单输入值到 Django 中的现有值

rails wicked gem has_one 关联和嵌套形式

如何在Access中使用子表单时编辑现有记录而不创建新记录?

通过使用php将表单中的值添加到表列中的现有值来更新数据库中的值的问题

编辑 Django 表单中的现有条目