我的表posts
包含模型Post
和表格语言(columns-id,post_id,language),模型为Language
。 Post有很多语言,语言属于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个英语语言用于示例。该帖子可以有多种语言,但语言不同。
我尝试使用validates_uniqueness_of :language, scope: :post_id
,但如果我添加两次英语(全部小写),则没有错误,并且数据会插入到表中。
如何使用当前帖子的范围验证帖子的语言的唯一性?
编辑:我发现这是Rails中的一个错误 - GitHub,但我仍然需要一个解决方案。答案 0 :(得分:6)
如何验证Rails 5中两列的唯一性? 这就是答案
validates :username, uniqueness: { scope: :group_id }
如果您需要记录是唯一的,请向记录添加唯一索引
class AddUniqueIndexToRoles < ActiveRecord::Migration[5.2]
def change
add_index :roles, [:username, :group_id], unique: true
end
end
答案 1 :(得分:2)
我完全不了解您的问题,但如果您无法通过以下
验证唯一性validates_uniqueness_of :language, scope: :post_id
然后你可以尝试类似下面的内容
validates :validate_language_id
def validate_language_id
if post.languages.where(language: self.language).exist?
error.add(:language_id, 'has already been taken')
end
end
我希望这对你有用......