我有一个名为
posts
的表格,并带有一个名为Post
的模型,还有一个名为languages
的表格(列 - id、post_id、language),并且有一个名为Language
的模型。文章有许多语言,而语言属于一篇文章。在文章模型中我有:
文章模型:
has_many :languages
validates_associated :languages
语言模型:
belongs_to :post
validates_uniqueness_of :language, scope: :post_id
语言是表格“languages”中的列。
在posts_controller(strong parameters)中允许language字段:
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范围内语言的唯一性,并且每篇文章只有一种英语语言。文章可以有多种语言,但是不同的语言。
我尝试使用validates_uniqueness_of :language, scope: :post_id
,但是如果我两次添加英语(全部小写),则不会出现错误,数据将被插入到表中。
如何验证当前文章范围内语言的唯一性?
编辑:我看到这是Rails中的一个bug - GitHub,但我仍然需要解决方案。