2015-10-20 6 views
0

Я пробовал решения, найденные в результатах поиска, но проверка еще не работает. Вот настройка модели:Rails ActiveRecord: проверка единственности на вложенной модели

class Transaction < ActiveRecord::Base 
    has_many :trans_items, class_name: "TransItem", dependent: :destroy, inverse_of: :transact 
    accepts_nested_attributes_for :trans_items 

class TransItem < ActiveRecord::Base 
    belongs_to :transact, class_name: "Transaction", foreign_key: :transaction_id, inverse_of: :trans_items 
    validates_uniqueness_of :material_id, :scope => :transaction_id 
end 

Это все еще становится успешно создан:

Transaction 
> trans_items 
- material_id: 9 
- transaction_id: 1 
> trans_items 
- material_id: 9 
- transaction_id: 1 

UPDATE 1:

Как предлагается ниже, я попытался это решение, но до сих пор не работает:

validates :material_id, uniqueness: { scope: :transaction_id }

Если это поможет, то форма создать это (используя nested_form камень):

<%= f.link_to_add "Add Material", :trans_items, :data => { :target => "#trans_items" } %> 
    <table id="trans_items" class="table table-condensed" cellspacing="0"> 
    <%= f.fields_for :trans_items, wrapper: false do |builder| %> 
     <tr class="fields"> 
     <td width="10%"> 
      <%= builder.label :qty %><br> 
      <%= builder.number_field :qty, :class => 'form-control input-sm', :step => 'any' %> 
     </td> 
     <td> 
      <%= builder.label :material_id %> 
      <%= builder.collection_select(:material_id, Material.all, :id, :material_display_dropdown, {prompt: "Select one..."}, { :class => "form-control input-sm" }) %> 
     </td> 
     <td> 
      <%= f.link_to_remove "Remove" %> 
     </td> 
     </tr> 
    <% end %> 
    </table> 

ответ

0

Попробуйте это:

validates :material_id, uniqueness: { scope: :transaction_id } 
+0

попытался это только сейчас, но до сих пор не работает :( –

+0

Попробуйте Использовать индекс [Создать резервную копию с уникальным индексом] (http://apidock.com/rails/ActiveRecord/Validations/ClassMethods/validates_uniqueness_of#269-Back-it-up-with-a-unique-index) –

+0

Спасибо. Это сработало, однако я получаю эту ошибку 'SQLite3 :: ConstraintException не уникальной'. –

Смежные вопросы