2012-07-27 141 views
0

嗨,大家好,我是紅寶石新手...我有添加產品頁面,我想如果有一個重複的產品名稱在1類別下例如「產品名稱:測試」,「類別:其他」驗證「產品名稱已存在,請選擇另一個」。但如果您更改了類別「產品名稱:測試」,「類別:商店和下落」,它將保存新產品。產品驗證

這是我在我的表單代碼:添加新的產品

<% content_for :post_content do %> 
    <div class="post"> 
     <% form_for :product, @product do | fld | %> 
     <span class="notice"><% if @product.errors.any? %><p class="error"><%= @product.errors.first[1] %></p><% end %></span> 
     <table class="tbl-form" cellpadding="0" cellspacing="0"> 
      <tbody> 
       <tr> 
        <td class="name" width="100">Code:</td> 
        <td colspan="99"><%= fld.text_field :product_code, :class => "large" %></td> 
       </tr> 
       <tr height="5"/> 
       <tr> 
        <td class="name" width="100">Name:</td> 
        <td colspan="99"><%= fld.text_field :name, :class => "large" %></td> 
       </tr> 
       <tr height="5"/> 
       <tr> 
        <td class="name" width="100">Start Week:</td> 
        <td colspan="99"><%= fld.select :start_week, options_for_select(StockMovement.order("year DESC, week DESC").map { | val | [ "#{ val.year }/#{ val.week }", val.id] }, :selected => @product.start_week), :class => "ddl_SW" %></td> 
       </tr> 
       <tr height="5"/> 
       <tr> 
        <td class="name" width="100">Category:</td> 
        <td colspan="99"><%= fld.select :product_category, options_for_select(ProductCategory.where("jos_product_category.published = 1").all.map { | val | [ val.name, val.id] }, :selected => @product.product_category)%></td> 
       </tr> 
       <tr height="5"/> 
       <tr> 
        <td class="name">Thumbnail:</td> 
        <td colspan="99"><%= fld.text_field :thumbnail, :class => "large" %></td> 
       </tr> 
       <tr height="5"/> 
       <tr> 
        <td class="name">Original Image:</td> 
        <td colspan="99"><%= fld.text_field :original_image, :class => "large" %></td> 
       </tr> 
       <tr height="5"/> 
       <tr><td class="name">Publish:</td><td><span id="yesno"><%= fld.check_box :published, :class => "hide-chk" %><a id="true" alt="1" rel="product_published" class="yes">Yes</a><a id="false" alt="0" rel="product_published" class="no on">No</a></span></td></tr> 
       <tr height="25"/> 
       <tr class="btn-holder"> 
        <td colspan="99"> 
         <input type="image" src="/images/btn-save.png" class="img-btn"><a href="<%= admin_products_path %>" class="lnk-btn back">Back</a> 
        </td> 
       </tr> 
       <tr height="5"/> 
      </tbody> 
     </table> 
     <% end %> 
    </div> 
<% end %> 

這裏是在我的模型:

validates_uniqueness_of :product_code, :message => 'Product code is already taken' 
    validates_presence_of :product_code, :message => "Product code is required" 
    validates_presence_of :name, :message => "Product name is required" 
    validates_uniqueness_of :name, :message => 'Product name is already taken' 

這裏是在我的控制器:

def new 
    @product = Product.new 

    if request.post? and params[:product] 
     @product = Product.new(params[:product]) 
     @product.creator = logged_user['clientID'] 

     if @product.save 
     #render :json => params[:product] 
     redirect_to admin_product_show_url(:productID => @product.id), :notice => '<p class="success">You have successfully added a new product '"#{ @product.name }"'</p>' 
     end 
    end 
    end 

注:產品和類別是與數據庫不同的表格....

在此先感謝..

回答

0

我假設你必須具有參考鍵像CATEGORY_ID在產品表的類別表

所以改變這種

validates_uniqueness_of :name, :message => 'Product code is already taken' 

validates_uniqueness_of :name, :scope => category_id, :message => 'Product code is already taken' 

這將驗證特定類別產品名稱的唯一性

+0

感謝男人,它的工作..cheers!但它是我沒有在scopre中使用category_id ..我使用product_category這是我的領域的名稱。但是再次感謝......我不完全理解範圍的含義 – Lian 2012-07-27 04:34:11