【发布时间】:2018-06-24 07:18:10
【问题描述】:
我有表 posts 和模型 Post 和表语言(列 - id、post_id、语言)和模型 Language。 Post 有多种语言,Language 属于一个 Post。在帖子模型中我有:
后模型:
has_many :languages
validates_associated :languages
语言模型:
belongs_to :post
validates_uniqueness_of :language, scope: :post_id
language 是表中的语言列。
posts_controller 中允许语言字段(强参数):
def post_params
params.require(:post).permit(:languages_attributes => [:language], ...)
这是创建帖子的表单视图:
<%= form_for @post do |f| %>
.....
<%= f.fields_for :languages do |language| %>
<%=language.select :language, ['english', 'italian', 'french', 'spanish'], name: 'post[languages_attributes][][language]' %>
<%=language.select :language, ['english', 'italian', 'french', 'spanish'], name: 'post[languages_attributes][][language]' %>
<%=language.select :language, ['english', 'italian', 'french', 'spanish'], name: 'post[languages_attributes][][language]' %>
<%=language.select :language, ['english', 'italian', 'french', 'spanish'], name: 'post[languages_attributes][][language]' %>
<% end %>
这是创建发布方法:
@post= Post.new(post_params)
if @post.save
....
我想验证具有帖子范围(范围::post_id)的语言的唯一性,并且每个帖子都只有 1 次英语作为示例。帖子可以有超过 1 种语言,但语言不同。
我尝试使用validates_uniqueness_of :language, scope: :post_id,但如果我添加两次英语(全部小写),则不会出现错误,并且数据会插入到表中。
如何在当前帖子的范围内验证帖子语言的唯一性?
编辑:我发现这是 Rails 中的一个错误 - GitHub,但我仍然需要解决方案。
【问题讨论】:
-
请告诉您要验证语言表中的哪一列在您的语言模型中的唯一性。我不认为它被称为语言
-
它被称为
language。 -
这能回答你的问题吗? Validate uniqueness of multiple columns
标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4 ruby-on-rails-3.2